Hi,
[quoted text, click to view] > 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'.
Enclose all strings in _T() that ensures that the correct character type
(char or wchar_t) is used.
[quoted text, click to view] > 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
[quoted text, click to view] > 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.
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