If I create a new Win32 Console project (unmanaged C++, Visual Studio 2005),
and add the following to the main program:
// Add this above the main routine
#include <windows.h> // Add this at the top of the file
// Add this to the main routine
MessageBox(NULL, "A", "B", MB_OK);
The compiler (Visual Studio 2005) complains that it can't convert parameter
2 from 'const char [2]' to 'LPCWSTR'.
I don't understand why the compiler apparently thinks that I am using
multi-byte character semantics. The really bizarre part is that I have
another project that contains calls to MessageBox, and that project compiles
just fine. I've looked at the project properties in both projects, but I
can't see anything that would obviously cause one to compile correctly and
one to fail to compile.
This all began when I tried to write some code that formats a message and
sends it to the MessageBox function, like this:
ostringstream msg;
msg << "my message expression";
MessageBox(NULL, msg.str().c_str(), "Title", MB_OK);
In this case, the compiler complains that it can't convert parameter 2 from
'const char *' to 'LPCWSTR'. But, as I said, I have this identical code in
another project and it works just fine.
TIA - Bob
Nathan Mates - 24 Jun 2007 00:59 GMT
>I don't understand why the compiler apparently thinks that I am using
>multi-byte character semantics.
In DevStudio, this setting can be changed by right-clicking on your
project, selecting properties, then going to Configuration Properties
-> General -> Character Set. Turn off unicode, and go to multibyte
character set.
Nathan Mates
--
<*> Nathan Mates - personal webpage http://www.visi.com/~nathan/
# Programmer at Pandemic Studios -- http://www.pandemicstudios.com/
# NOT speaking for Pandemic Studios. "Care not what the neighbors
# think. What are the facts, and to how many decimal places?" -R.A. Heinlein
ewpatton@gmail.com - 24 Jun 2007 05:20 GMT
> If I create a new Win32 Console project (unmanaged C++, Visual Studio 2005),
> and add the following to the main program:
[quoted text clipped - 27 lines]
>
> TIA - Bob
You can also put L in front of the string to tell the compiler it
should be expressed as a Unicode string rather than an ASCII string.
SvenC - 24 Jun 2007 10:23 GMT
Hi,
> If I create a new Win32 Console project (unmanaged C++, Visual Studio
> 2005), and add the following to the main program:
[quoted text clipped - 7 lines]
> The compiler (Visual Studio 2005) complains that it can't convert
> parameter 2 from 'const char [2]' to 'LPCWSTR'.
Enclose all strings in _T() that ensures that the correct character type
(char or wchar_t) is used.
> I don't understand why the compiler apparently thinks that I am using
> multi-byte character semantics. The really bizarre part is that I
> have another project that contains calls to MessageBox, and that
> project compiles just fine. I've looked at the project properties in
> both projects, but I can't see anything that would obviously cause
> one to compile correctly and one to fail to compile.
Project properties -> Configuration Properties -> General : Character Set
> This all began when I tried to write some code that formats a message
> and sends it to the MessageBox function, like this:
[quoted text clipped - 6 lines]
> 2 from 'const char *' to 'LPCWSTR'. But, as I said, I have this
> identical code in another project and it works just fine.
Define t-versions of those STL types based on TCHAR
#include <tchar.h>
#include <string>
#include <sstream>
typedef std::basic_ostringstream<TCHAR> tstringstream;
typedef std::basic_string<TCHAR> tstring;
tstringstream msg;
msg << _T("my message expression");
MessageBox(NULL, msg.c_str(), _T("Title"), MB_OK);
The above compiles with both Unicode and Multi byte settings.
--
SvenC
Bob Altman - 24 Jun 2007 17:27 GMT
Mega cool. Thanks!!!
- Bob
> Hi,
>
[quoted text clipped - 50 lines]
> --
> SvenC