|
Actually, yes, that would be good. I have looked at several classes found online but most were written years ago and have issues with VC2K5.
Even if your code points me in the right direction, that is good.
send to: rickr at nurserysupplies dot com
There are 10 kinds of people, those that understand binary and those that don't.
|
|
|
|
|
Could this be a problem with the WIDE characters? With the original application (Visual Studio 6), I did not use wide chars at all. This one has it turned on by default. I never thought it would cause a problem, but it may here.
Any thoughts on this?
There are 10 kinds of people, those that understand binary and those that don't.
|
|
|
|
|
By default, the VS2K5 project set the Character set to "Use Unicode Character set". Could this be part of the problem?
If so, is there any way to force the Serial Comm class to NOT be Uni-Code?
There are 10 kinds of people, those that understand binary and those that don't.
|
|
|
|
|
Could you use PortMon to logdata from your app, then look at it with DEBUG to see exactly what hex data is in there? If the data is not what you (or the receiving device) wants then yes, unicode could be a problem. Can't you disable unicode for the entire application if it's not needed?
|
|
|
|
|
I am in the process of converting to non-Unicode now, but man, it generated HUNDREDS of errors. This will take awhile to resolve.
I was hoping that it would be easier to force the data string to ANSI, but am not sure exactly how to do that.
There are 10 kinds of people, those that understand binary and those that don't.
|
|
|
|
|
Take a look at W2A() and T2A() macros and see if they might help.
|
|
|
|
|
I want to fill a structure and then print it.
How to print the values of the structue?
The structure is:
#define UINT32 unsigned int
#define INT32 int
#define UCHAR unsigned char
typedef struct CheckSumPair
{
UINT32 weakcs; // The weak, rolling Adler32 checksum.
UCHAR StrongCS[10];
};
I have dynamically allocated memory to it as folows.
CheckSumPair* CSPair = (CheckSumPair*)malloc(sizeof(CheckSumPair)*10);
for(int x = 0;x < 10;x++)
{
CSPair->weakcs = (UINT32)x+1;
strncpy((char*)CSPair->StrongCS,(char*)"XYZ",10);
strncpy((char*)CSPair->StrongCSString,(char*)"CEDVCD",10*2+1);
}
Now print the values
for(int x = 0;x < 10;x++)
printf("%d %s %s\n\n",CSPair[x]->.weakcs,CSPair[x]->StrongCS,CSPair[x]->StrongCSString);
While printing the values I get the following error:
error C2232: '->CheckSumPair::StrongCS' : left operand has 'struct' type, use '.'
error C2819: type 'CheckSumPair' does not have an overloaded member 'operator ->'
see declaration of 'CheckSumPair'
|
|
|
|
|
Try this access in your loops :
{
CheckSumPair* psTempPair = (CheckSumPair*) ((BYTE*)CSPair + sizeof(CheckSumPair) * x);
}
virtual void BeHappy() = 0;
|
|
|
|
|
Eugen Podsypalnikov wrote: CheckSumPair* psTempPair = (CheckSumPair*) ((BYTE*)CSPair + sizeof(CheckSumPair) * x);
All this casting is unnecessary and prone to error, the compiler handles pointer arithmetic automatically.
txtspeak is the realm of 9 year old children, not developers. Christian Graus
|
|
|
|
|
In this case - it is necessary,
since sizeof(CheckSumPair*) != sizeof(CheckSumPair) !
virtual void BeHappy() = 0;
|
|
|
|
|
Pointers to structures can be incremented by simple expressions thus:
CSPair++;
that is all that is needed to point to the next entry in the array.
txtspeak is the realm of 9 year old children, not developers. Christian Graus
|
|
|
|
|
|
thanks eugen for the reply
that was a typing mistake
issue is resolved by using
CheckSumpair[x].memberN;
.
.
.
since i am using [] operator to access pointer no need of using ->
|
|
|
|
|
The address CSPair[x] is a structure reference not a pointer, hence use the '.' member access operator.
txtspeak is the realm of 9 year old children, not developers. Christian Graus
|
|
|
|
|
Your code is really ugly.
rupeshkp728 wrote: #define UINT32 unsigned int
#define INT32 int
#define UCHAR unsigned char
Why do you use #define instead of typedef ?
rupeshkp728 wrote: typedef struct CheckSumPair
{
UINT32 weakcs; // The weak, rolling Adler32 checksum.
UCHAR StrongCS[10];
};
Typedef what?
rupeshkp728 wrote: CheckSumPair* CSPair = (CheckSumPair*)malloc(sizeof(CheckSumPair)*10);
Why are you using malloc? Do you really need to use C memory allocation functions?
rupeshkp728 wrote: strncpy((char*)CSPair->StrongCSString,(char*)"CEDVCD",10*2+1);
struct CheckSumPair has no StrongCSString member.
rupeshkp728 wrote: printf("%d %s %s\n\n",CSPair[x]->.weakcs,CSPair[x]->StrongCS,CSPair[x]->StrongCSString);
This is the ugliest part. What are you trying to do?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
I think you have to print the values as follows:
for(int x = 0; x < 10; x++)
printf("%d %s %s\n\n",CSPair[x].weakcs, CSPair[x].StrongCS, CSPair[x].StrongCSString);
or
for(int x = 0; x < 10; x++)
{
printf("%d %s %s\n\n",CSPair->weakcs,CSPair->StrongCS,CSPair->StrongCSString);
CSPair++;
}
|
|
|
|
|
Don't you have a warning "warning C4091: 'typedef ' : ignored on left of 'CheckSumPair' when no variable is declared"?
Don't you have an error "error C2039: 'StrongCSString' : is not a member of 'CheckSumPair'"?
Type of CSPair[x] is CheckSumPair not CheckSumPair*, so you can't use "->", use "." instead.
Instruction "CSPair[x]->.weakcs" contains "->" and ".".
Why malloc? use the new operator instead:
CheckSumPair* CSPair = new CheckSumPair[10];
or better, if possible:
CheckSumPair CSPair[10];
And finally, you have to explain what are you trying to do with the two strncpy, maybe your code has to be like:
#define UINT32 unsigned int
#define INT32 int
#define UCHAR unsigned char
typedef struct
{
UINT32 weakcs;
UCHAR StrongCS[10 + 1];
UCHAR StrongCSString[10 + 1];
} CheckSumPair;
int main()
{
CheckSumPair CSPair[10];
for(int x = 0; x < 10; x++)
{
CSPair[x].weakcs = (UINT32)x+1;
strncpy((char*)CSPair[x].StrongCS, "XYZ", 10);
strncpy((char*)CSPair[x].StrongCSString, "CEDVCD", 10);
}
for(int x = 0; x < 10; x++)
{
printf("%d %s %s\n\n", CSPair[x].weakcs, CSPair[x].StrongCS, CSPair[x].StrongCSString);
}
return 0;
}
|
|
|
|
|
Hello Friends
While compiling 32bit code on 64 bit compiler,I came across one error is
error C2664: 'SetTimer' : cannot convert parameter 4 from 'void (__cdecl *)(HWND,UINT,UINT,DWORD)' to 'TIMERPROC'
Do u have any Ideas to resolve this?
Regards
Yogesh
|
|
|
|
|
Forgot to mention CALLBACK in TimerProc declaration?
|
|
|
|
|
That I am using CALLBACK in Declaration.
But I got it to work after casting fourth parameter to TIMERPROC.
IS this the right way?
Thanks
Yogesh
|
|
|
|
|
Nope.
However, as Rejeesh suggested, even in Microsoft samples there is the 'cast-hack'.
Anyway, at least on my system, the following declaration:
void CALLBACK myTimerFun(HWND , UINT , UINT_PTR , DWORD );
compiles fine, without the need of casting.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
modified on Wednesday, March 31, 2010 5:47 AM
|
|
|
|
|
Right
The third parameter may not be a UINT under x64 ,
it must be UINT_PTR
virtual void BeHappy() = 0;
|
|
|
|
|
I got it the way u defined and without casting.
thanks
Yogesh
modified on Wednesday, March 31, 2010 8:14 AM
|
|
|
|
|
|
So Rajneesh without Type casting ,Is there any other way to solve my prob?
As In my case I am using CALLBACK in declaration.
Thanks
Yogesh
|
|
|
|