Megosztás:


Függvény prototípusainak konvenciók

A Windows SDK általános, Windows-kódlapés Unicode -verziókban függvény prototípusokat biztosít. A prototípusok windowsos kódlap-prototípusok vagy Unicode-prototípusok előállítására fordíthatók. Ebben a témakörben mindhárom prototípust tárgyaljuk, és a SetWindowTextfüggvénykódmintáival szemléltetjük.

Az alábbiakban egy általános prototípust mutatunk be.

BOOL SetWindowText(
  HWND hwnd,
  LPCTSTR lpText
);

A fejlécfájl a makróként implementált általános függvénynevet adja meg.

#ifdef UNICODE
#define SetWindowText SetWindowTextW
#else
#define SetWindowText SetWindowTextA
#endif // !UNICODE

Az előfeldolgozó kibontja a makrót a Windows-kódlapra vagy a Unicode-függvény nevére. Az "A" (ANSI) vagy a "W" (Unicode) betű szükség szerint az általános függvénynév végén lesz hozzáadva. A fejlécfájl ezután két konkrét prototípust biztosít, egyet a Windows kódlapjaihoz, egyet pedig a Unicode-hoz, ahogy az alábbi példákban is látható.

BOOL SetWindowTextA(
  HWND hwnd,
  LPCSTR lpText
);
BOOL SetWindowTextW(
  HWND hwnd,
  LPCWSTR lpText
);

A sztringekhez készült Windows-adattípusok magyarázata szerint az általános függvény prototípusa az LPCTSTR adattípust használja a szöveges paraméterhez. A Windows kódlap prototípusa azonban az LPCSTR típust használja, a Unicode-prototípus pedig az LPCWSTR-t.

A szöveges argumentumokkal rendelkező összes függvény esetében az alkalmazásoknak általában az általános függvény prototípusait kell használniuk. Ha egy alkalmazás a fejlécfájlok #include utasításai előtt vagy a fordítás során definiálja a "UNICODE"-t, az utasítások Unicode-függvényekké lesznek lefordítva.

Jegyzet

Az új Windows-alkalmazásoknak Unicode-ot kell használniuk a változatos kódlapok inkonzisztenciája és a honosítás megkönnyítése érdekében. Ezeket általános függvényekkel kell írni, és unicode-függvényekké kell alakítani a függvényeket. Azon kevés helyen, ahol egy alkalmazásnak 8 bites karakteradatokkal kell dolgoznia, explicit módon használhatja a Windows-kódlapok funkcióit.

 

Az alkalmazásnak mindig egy általános függvény prototípusát kell használnia az általános sztringgel és karaktertípusokkal. A nagybetűs "W" végződésű függvénynevek a Unicode-t, azaz széles karaktert, paramétereket veszik fel. Egyes függvények csak Unicode-verziókban léteznek, és csak a megfelelő adattípusokkal használhatók. Például LCIDToLocaleName és LocaleNameToLCID csak Unicode-verziókkal rendelkeznek.

Az egyes Unicode- és karakterkészletfüggvények referenciadokumentációjának Követelmények szakasza információkat nyújt a támogatott operációs rendszerek által implementált függvényverziókról. Ha egy "Unicode" kezdetű sort tartalmaz, a függvény külön Unicode- és Windows-kódlapverzióval rendelkezik.

Jegyzet

Ha egy függvény rendelkezik egy karaktersztring hosszparaméterével, a hosszt a sztring TCHAR-értékeinek számaként kell dokumentálni. Ez az adattípus a függvény Windows-kódlapverzióinak bájtjára vagy a Unicode-verziók 16 bites szavaira vonatkozik. Az olyan függvények azonban, amelyek nem beírt memóriablokkokra, például a GlobalAlloc függvényre mutató mutatót igényelnek vagy adnak vissza, általában bájtban méretezhetők, függetlenül a használt prototípustól. Ha a nem beírt memória egy sztringhez van osztva, az alkalmazásnak meg kell szoroznia a karakterek számát a sizeof(TCHAR) karakterekkel. További információ: Általános adattípusok használata.

 

Unicode a Windows API