all groups > dotnet internationalization > june 2007 >
You're in the

dotnet internationalization

group:

Multi-byte characters?



Multi-byte characters? Bob Altman
6/23/2007 4:05:18 PM
dotnet internationalization: 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

Re: Multi-byte characters? ewpatton NO[at]SPAM gmail.com
6/23/2007 9:20:38 PM
[quoted text, click to view]

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.
Re: Multi-byte characters? nathan NO[at]SPAM visi.com
6/23/2007 11:59:27 PM
In article <eWlY4retHHA.4612@TK2MSFTNGP04.phx.gbl>,
[quoted text, click to view]

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
Re: Multi-byte characters? SvenC
6/24/2007 12:00:00 AM
Hi,

[quoted text, click to view]

Enclose all strings in _T() that ensures that the correct character type
(char or wchar_t) is used.

[quoted text, click to view]

Project properties -> Configuration Properties -> General : Character Set

[quoted text, click to view]

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
AddThis Social Bookmark Button