Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A Unicode MFC- és C-futásidejű támogatásának kihasználásához a következőkre van szükség:
Definiáld
_UNICODE.A program létrehozása előtt adja meg a szimbólumot
_UNICODE.Adja meg a belépési pontot.
A Linker mappa Speciális lapján, a projekt Tulajdonságlapok párbeszédpanelén állítsa a Belépési pont szimbólumot a következőre
wWinMainCRTStartup.Használjon hordozható futásidejű függvényeket és típusokat.
A Unicode-sztringek kezeléséhez használja a megfelelő C futásidejű függvényeket. Használhatja a
wcsfüggvénycsaládot, de a teljes mértékben hordozható (nemzetközileg engedélyezett)_TCHARmakrókat is előnyben részesítheti. Ezek a makrók mind a_tcselőtaggal vannak elnevezve; azstrfüggvénycsalád tagjait egy-egy makró helyettesíti. Ezeket a függvényeket részletesen aRun-Time könyvtárhivatkozás nemzetköziesítési szakaszában ismertetjük. További információ: Generic-Text leképezések a tchar.h-ban.A
_TCHARés a kapcsolódó hordozható adattípusok használata, amelyeket a Unicode támogatásában leírtak.A karakterláncokat megfelelően kell kezelni.
A Visual C++ fordító a következőképpen értelmez egy literál sztringet:
L"this is a literal string"Unicode-karakterekből álló karakterláncot jelent. A literális karakterekhez ugyanazt az előtagot használhatja. A
_Tmakrót használva a literális sztringeket úgy lehet kódolni, hogy azok Unicode környezetben Unicode sztringként, míg Unicode nélkül ANSI sztringként (beleértve az MBCS-t is) forduljanak le. Például a következő helyett:pWnd->SetWindowText( "Hello" );használat:
pWnd->SetWindowText( _T("Hello") );Az
_UNICODEdefiníciójával a_Ta literális sztringet L előtagú formára fordítja; ellenkező esetben a_TL előtag nélkül fordítja le a sztringet.Jótanács
A
_Tmakró megegyezik a makróval_TEXT.Ügyeljen arra, hogy sztringhosszokat adjon át a függvényeknek.
Egyes függvények a sztringben lévő karakterek számát szeretnék megadni; mások a bájtok számát kérik. Ha például a
_UNICODEdefiniálva van, akkor aCArchiveobjektumra irányuló következő hívás nem fog működni (mivel astregyCString).archive.Write( str, str.GetLength( ) ); // invalidUnicode-alkalmazásokban a hossz adja meg a karakterek számát, de nem a megfelelő bájtszámot, mivel mindegyik karakter 2 bájt széles. Ehelyett a következőt kell használnia:
archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) ); // validamely megadja az írható bájtok megfelelő számát.
Az MFC-tagfüggvények azonban, amelyek nem bájtorientáltak, hanem karakterorientáltak, a további kódolás nélkül működnek:
pDC->TextOut( str, str.GetLength( ) );CDC::TextOuttöbb karaktert vesz fel, nem pedig bájtokat.Unicode-fájlok megnyitásához használja fopen_s, _wfopen_s .
Összegzésképpen az MFC és a futásidejű kódtár a következő támogatást nyújtja a Unicode-programozáshoz:
Az adatbázisosztály tagfüggvényei kivételével az összes MFC-függvény Unicode-kompatibilis, beleértve a
CString.CStringUnicode/ANSI konverziós függvényeket is biztosít.A futásidejű kódtár az összes sztringkezelő függvény Unicode-verzióit tartalmazza. (A futásidejű kódtár a Unicode-hoz vagy MBCS-hez alkalmas hordozható verziókat is biztosít. Ezek a
_tcsmakrók.)A tchar.h hordozható adattípusokat és a
_Tkonstans sztringek és karakterek fordítására szolgáló makrót biztosít. További információ: Generic-Text leképezések a tchar.h-ban.A futásidejű könyvtár a
mainszéles karakterkészletes verzióját biztosítja. Awmainhasználatával tegye az alkalmazását Unicode-kompatibilissé.