Reputation: 3372
I get a compilation error on the line:
MessageBox(e.getAllExceptionStr().c_str(), _T("Error initializing the sound player"));
Error 4 error C2664: 'CWnd::MessageBoxA' : cannot convert parameter 1 from 'const wchar_t *' to 'LPCTSTR' c:\users\daniel\documents\visual studio 2012\projects\mytest1\mytest1\main1.cpp 141 1 MyTest1
I don't know how to resolve this error, I tried the following:
MessageBox((wchar_t *)(e.getAllExceptionStr().c_str()), _T("Error initializing the sound player"));
MessageBox(_T(e.getAllExceptionStr().c_str()), _T("Error initializing the sound player"));
I am using the setting "Use Multi-Byte Character Set" and I don't want to change it.
Upvotes: 7
Views: 9466
Reputation: 42934
If you want to compile in the obsolete MBCS mode, you may want to use the ATL/MFC string conversion helpers, like CW2T
, e.g.:
MessageBox(
CW2T(e.getAllExceptionStr().c_str()),
_T("Error initializing the sound player")
);
It seems that your getAllExceptionStr()
method returns a std::wstring
, so calling .c_str()
on it returns a const wchar_t*
.
CW2T
converts from wchar_t
-string to TCHAR
-string, which in your case (considering the MBCS compilation mode), is equivalent to char
-string.
Note however that conversions from Unicode (wchar_t
-strings) to MBCS (char
-strings) can be lossy.
Upvotes: 0
Reputation: 2145
As e.getAllExceptionStr().c_str()
is returning wide string then the following will work:
MessageBoxW(e.getAllExceptionStr().c_str(), L"Error initializing the sound player");
Note the W
on the end of MessageBoxW
;
Upvotes: 1
Reputation: 13864
LPCSTR = const char*
. You are passing it a const wchar*
, which clearly is not the same thing.
Always check that you are passing API functions the right parameters. _T("")
type C-string are wide strings and can't be used with that version of MessageBox()
.
Upvotes: 1
Reputation: 308176
The easiest way is simply to use MessageBoxW
instead of MessageBox
.
MessageBoxW(e.getAllExceptionStr().c_str(), L"Error initializing the sound player");
The second easiest way is to create a new CString from the original; it will automatically convert to/from wide string and MBCS string as necessary.
CString msg = e.getAllExceptionStr().c_str();
MessageBox(msg, _T("Error initializing the sound player"));
Upvotes: 5