
winAPI aplikace Hello World
Dobrý večer,
nainstaloval jsem si Microsoft visual studio 2010 a zkusil v něm přeložit winAPI hello world aplikace, ale chyba.
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, "Ahoj Win API !!!","První program", MB_OK);
return 0;
}
Kod jsem převzal odtud: http://www.builder.cz/rubriky/c/c--/ucime-se-win-a pi-motivacni-uvod-155994cz
Při překladu mi visual studio vyhazuje chybu:
main.cpp(6): error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [17]' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Ve winAPI zatím neumím, tak pořádně nevím o jakou chybu se jedná.
A jak ji opravit.
Předem díky za pomoc.
MS pouziva takzvane TCHAR, to je automaticky prekladacom zmenene na single byte alebo multibyte string (unicode), v zavislosti od nastaveni prekladaca.
Ked pises konstantny string, a ma z toho byt TCHAR, tak musis pouzit makro _T, aby to v pripade potreby skonvertoval na multibyte (unicode). T.j.
MessageBox(NULL, _T("Ahoj Win API !!!"),_T("První program"), MB_OK);
Je to jasne z tej chybovej hlasky. Nevie konvertovat const char (co je jendobytovy string) na LPCWSTR, co je wide. Prekladas unicode program (co je dobre), tak musis pouzivat tutorialy nejake novsie, ne nejake z roku 1998 :D
P.S. tie tchary ta budu prenasledovat neustale, ptz dementny MS kvoli nim uplne zmenil aj nazvy standardnych C funkcii, proste MS chaos :) Ale neni to ziaden velky problem. Musis ako programator vediet kde idu multibyte stringy a kde mas strikne jednobytove (napr. pri praci so subormi) a kde je pripadne nutna konverzia.