Eli yritin kääntää suomipelit sivulta löytynyttä esimerkkikoodia(ilman muutoksia). Kyseessä siis tämä koodi:
http://www.suomipelit.com/index.php?c=naytaartikkeli&id=58&s=5
Jokatapauksessa käännösyritys törmäsi tälläisiin virheilmoituksiin:
>.\opengltest.cpp(58) : error C2440: '=' : cannot convert from 'const char [17]' to 'LPCWSTR'
Noh korjasin ongelman laittamalla koodirivin tähän muotoon:
wc.lpszClassName = (LPCWSTR)"OpenGLtutoriaali";
Tuo siis jokaiseen jossa yritettiin laittaa tekstijonoa.
Mutta nyt sitten otsikkopalkki etc koostuu kiinalaisista(?) merkeistä. Eli jokin nyt tässä mättää mutta mikä? On kai se mahdollista että suomipelit sivulla on virheellistä koodia mutta jotenkin tuntuu että oman koneen asetuksissa on syy.
Kääntäjänä siis Visual C++ 2008 Express Edition.
Windowsin käyttämässä nimityksessä LPCWSTR oleva W viittaa wide char -tyyppiin. Tällöin myös tekstivakiosi pitää olla sellaista tyyppiä, mikä taas onnistuu kirjoittamalla eteen L-kirjain: L"teksti". Pakotettu tyypinmuunnos ei yleensä ole oikea ratkaisu virheiden korjaamiseen.
Jotain keinoa sitten saada nuo hyväksymään normaaleja tekstijonoja joidenkin huuhaa wide charien sijasta?
Varmista, että makroa UNICODE ei ole määritelty ennen Windowsin otsikkojen liittämistä.
Unicodeen siirtyminen on kyllä usein järkevää.
"Unicodeen siirtyminen on kyllä usein järkevää."
Noh millais funktio pitäisi määritellä jotta voisin antaa parametrina tuollaisen? Nyt siis:
int luoIkkuna(unsigned int leveys, unsigned int korkeus, char *otsikko)
Jos laitan tuohon kutsuun L"tekstiä" valittaa tyyppivirheestä joten en voi suoraan kutsua. Yritin määrittää charw *otsikko mutta eipä näyttäny toimivan. Näin ilmeisesti?
int luoIkkuna(unsigned int leveys, unsigned int korkeus, LPCWSTR *otsikko)
Vai jotenkin muuten?
LPCWSTR otsikko
Jos aiot WinAPIa elämässäsi käyttää, kannattaa edes opetella lukemaan sen tyyppejä. P, pointer; C, const; W, wide; STR, string.
Yksi tapa on käyttää tekstille LP(C)TSTR-tyyppiä ja tekstivakioiden määrittelyyn TEXT-makroa. Tällöin lopputuloksena on ANSI- tai Unicode-tekstiä käännösasetusten mukaan.
LPCTSTR teksti = TEXT("moi");
WinAPI-funkkareita voi kutsua muös ANSI-muotoisina. Esimerkiksi Messagebox on oletuksena tyyppiä MessageBoxW, joka tarvitsee luonnollisesti wide char -tyyppisiä merkkijonoja (MessageBox(NULL, L"Moi maailma!", L"", MB_OK);).
Voit "pakottaa" kuitenkinkin kääntäjän käyttämään ANSI-toteutusta kutsumalla suoraan MessageBoxA-funktiota (MessageBoxA(NULL, "Moi maailma!", "", MB_OK);).
Aihe on jo aika vanha, joten et voi enää vastata siihen.