Megosztás:


Unicode programozási összefoglalás

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őrewWinMainCRTStartup.

  • 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 wcs függvénycsaládot, de a teljes mértékben hordozható (nemzetközileg engedélyezett) _TCHAR makrókat is előnyben részesítheti. Ezek a makrók mind a _tcs előtaggal vannak elnevezve; az str fü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 _T makró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 _UNICODE definíciójával a _T a literális sztringet L előtagú formára fordítja; ellenkező esetben a _T L előtag nélkül fordítja le a sztringet.

    Jótanács

    A _T makró 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 _UNICODE definiálva van, akkor a CArchive objektumra irányuló következő hívás nem fog működni (mivel a str egy CString).

    archive.Write( str, str.GetLength( ) );    // invalid
    

    Unicode-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 ) );    // valid
    

    amely 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::TextOut tö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. CString Unicode/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 _tcs makrók.)

  • A tchar.h hordozható adattípusokat és a _T konstans 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 main széles karakterkészletes verzióját biztosítja. A wmain használatával tegye az alkalmazását Unicode-kompatibilissé.

Lásd még

Unicode-támogatás