|
I'm trying to make my code ANSI, MBCS and UNICODE compatible. All my string literals are wrapped in the _T() macro, and I use all the TCHAR functions when dealing with strings. In ANSI and MBCS my code compiles fine, but when switching to UNICODE I get compile errors. I have defined both UNICODE and _UNICODE. Here is an example:
'CreateFontA' : cannot convert parameter 14 from 'unsigned short [16]' to 'const char *'
and the function:
hfont = CreateFont(lfheight,0,0,0,800,FALSE,0,0,0,0,0,0,0,_T("Times New Roman") );
This tells me the ANSI version is trying to convert a wide char. Yet in the same file:
'wcsstr' : none of the 2 overloads can convert parameter 1 from type 'char *'
and the function:
TCHAR *idx = _tcsstr(tmp,_T("\\n"));
which tells me the functions are the unicode version.
Whats going on?
-- modified at 20:02 Thursday 24th August, 2006
|
|
|
|
|
It looks like _UNICODE is defined after the corresponding includes for CreateFont and _tcsstr.
--
The Show That Watches Back
|
|
|
|
|
I had this problem before and I found that there were two versions of the UNICODE definition. Last time I added
#ifdef _UNICODE
#ifndef UNICODE
#define UNICODE
#endif
#endif
and it worked. I did the same this time, but it's a no go. Some things are being converted, others are not. It looks like a TCHAR specific problem but I cannot find the cause.
|
|
|
|
|
I advise you to put these defines in your project's properties, and then recompile to make sure that stdafx.h et al picks it up. If the error still persists after that, I advise you to hire an exorcist...
--
From the Makers of Futurama
|
|
|
|
|
Found it. Some backstreet file had decided to not include stafx and rather include the files for itself. So my #defines were not being picked up.
|
|
|
|
|
Thats a New One, Never tried an Excorsist before, but it seems to have worked!
Let's get a new (ANSI Approved) Pragma , like
#pragma (invoke excorsist)
// This Pragma ensures that ( in the Debug Version at least
// that All Bugs will be Automatically Fixed)
Do not Forget however:
#pragma (endinvoke excorsist), or you get:
error C9999: "found end of line before closing pragma statement"
Regards
LateNightsInNewry
|
|
|
|
|
just write
#define UNICODE 1, you work will done!
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You
|
|
|
|
|
haha, I did. The trouble was I wrote it in a place where a particular file couldn't see it.
|
|
|
|
|
Help!
I'm in the process of switching an exisitng app to use comctrl version 6. In the process it broke transparent support I had for checkboxes. Static text controls still behave properly.
My main window is a CWnd and I handle the OnCtlColor call. It still allows me to change the brush of the checkbox, but not the text colour nor the transparent flag (whenever I use the transparent flag it picks black as the fill).
Any suggestions as to where I have gone astray?
Thanks!
|
|
|
|
|
|
I still didn't get the hang of these. We can add a value like so:
uRetVal |= DV_CENTERALL;
But I want to remove a value also if it is present:
uRetVal ^= (uRetVal | DV_RIGHT) == uRetVal ? DV_RIGHT : 0;
Is the above correct, or is there an easier better way to do it?
|
|
|
|
|
to remove DV_CENTERALL how about
<br />
uRetVal = uRetVal & ~DV_CENTERALL<br />
cje
|
|
|
|
|
Thanks for that. The '~' operator is not on MSDN, it's in the index, but the page has a large "Empty Index Entry" written across the top. So I am guessing it is the NOT operator?
|
|
|
|
|
yes, the ~ operator is the Bitwise NOT
cje
|
|
|
|
|
|
I need a function to get time(seconds and microseconds) in windows, like gettimeofday in Linux.
Can you help me?
Thanks
|
|
|
|
|
|
I need to get the microseconds too. What is the function, if exists?
thanks
|
|
|
|
|
Opps sorry, I saw milliseconds. I don't know if microseconds are supported.
led mike
|
|
|
|
|
afpr wrote: I need to get the microseconds too. What is the function, if exists?
Windows does not have that level of resolution. What exactly are you trying to do?
"Money talks. When my money starts to talk, I get a bill to shut it up." - Frank
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
I'm trying to calculate time between send and receive a packet. I'm using packet.dll.
thanks
|
|
|
|
|
|
Check ::GetSystemTimeAsFileTime() in the MSDN library.
|
|
|
|
|
afpr wrote:
I need a function to get time(seconds and microseconds) in windows, like gettimeofday in Linux.
try Multimedia timers .. timeGetDevCaps api will starting api for same
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You
|
|
|
|
|
I have found a solution. Use this functions:
/* Initialize everything to 0 */
void sec_init(void)
{
LARGE_INTEGER lFreq, lCnt;
QueryPerformanceFrequency(&lFreq);
freq = (double)lFreq.LowPart;
QueryPerformanceCounter(&lCnt);
start = lCnt.LowPart;
}
/* return number of seconds since sec_init was called with
** a gross amount of detail
*/
double sec(void)
{
LARGE_INTEGER lCnt;
long tcnt;
QueryPerformanceCounter(&lCnt);
tcnt = lCnt.LowPart - start;
return ((double)tcnt) / freq;
}
|
|
|
|