Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot convert parameter from 'const char[20]' to 'LPCWSTR'

When compiling this code:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInsance,HINSTANCE hPrevInstance,PSTR cmdLine,int showCmd){
    MessageBox(0,"First Win32 Program","Window Tittle",MB_OK);
    }

I get the compiler error:

Error C2664: 'MessageBoxW': cannot convert parameter 2 from 'const char [20]' to 'LPCWSTR' 1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

What am I doing wrong?

like image 346
Rolilink Avatar asked Nov 30 '22 08:11

Rolilink


2 Answers

By default, UNICODE is defined in Visual Studio 2010. Either call MessageBoxA() instead of using the MessageBox() define, or pass a wide string literal (L"First Win32 Program" and L"Window Title"). Or, if you really care about being able to build without UNICODE defined, use the TEXT() macro around your string literals: TEXT("First Win32 Program") (this is the same as L"First Win32 Program" when UNICODE is defined, but it will be "First Win32 Program" when UNICODE is not defined).

For more information about UNICODE and how it affects what APIs are called, see http://msdn.microsoft.com/en-us/goglobal/bb688113.aspx. Specifically, the sections below "Creating Win32 Unicode Applications".

On a side note: All Windows operating systems supported by Microsoft today are Unicode native. I would recommend to always favor the "wide" API. In this case, MessageBoxW(), which is what MessageBox() is defined to be when UNICODE is set. The days of using the TEXT() macro and compiling without UNICODE defined should be behind us.

like image 120
Peter Huene Avatar answered Dec 05 '22 06:12

Peter Huene


You have UNICODE defined, so MessageBox is expecting a wide string.

like image 37
Puppy Avatar answered Dec 05 '22 05:12

Puppy