/ / Môžu freetype prijímať názvy súborov Unicode? - c ++, visual-studio, unicode, freetype

Môžu freetype funkcie prijímať názvy súborov Unicode? - c ++, visual-studio, unicode, freetype

Mám projekt MSVC, ktorý používa freetype a teraz sa snažím presunúť ho do Unicode, ale funkcie freetype nepodporujú argumenty LPCTSTR pre cesty k súborom, chcú "const char *". Takže kód ako

    WINDOWS_FONT WindowsFont;
// ....
FT_New_Face (pLibrary, WindowsFont.pszFileName, i, &face); // WindowsFont.pszFileName is LPTSTR

pracoval, keď projekt bol ASCII, ale už nie je, keď je Unicode.Je tam spôsob, ako freetype prijať Unicode názvy súborov, niektoré preprocessor definovať prepnúť na unicode možno?

odpovede:

4 pre odpoveď č. 1

V štandarde C ++ nie je žiadna žiadna metóda Wfopen (2003). Vzhľadom k tomu, freetype má byť prenosný, používa len fopen, ktorý môže prijímať len konštantné * názvy súborov. Takže buď načítať súbor do pamäte (alebo pamäť mapovať) a potom použiť FT_New_Memory_Face na vytvorenie písma alebo previesť wchar_t pszFileName na 8-bitové kódovanie, ktoré potenciálne strácajú znaky z dôvodu nemožnej konverzie.

Na linux, môžete sa pokúsiť použiť setlocale tak fopen bude prijímať reťazce UTF8, konvertovať reťazec wchar_t na UTF8. však na oknách nebude to fungovať</a>, Takže buď načítať súbor do pamäte, alebo previesť pszFileName na 8-bitové kódovanie, potom ho odovzdať do FT_New_Face.


1 pre odpoveď č. 2

Vaša najlepšia stávka je pravdepodobne podľa konvencie a importu rámca tchar.h, potom použite _tfopen namiesto toho (a prepnutie na LPCTSTR, _T("your_string"), atď.). To vám umožní kompilovať rovnaký kód pre Linux a Windows s takmer žiadnou zmenou, zatiaľ čo podporuje buď UTF-16 alebo utf-8 v kóde.


0 pre odpoveď č. 3

Môžete použiť metódu FT_Open_Face a potrebujete aFT_Open_Args štruktúru ako argument. V službe FT_Open_Args.stream môžete nastaviť čítanie a zatvorenie spätného volania zvyčajne a nástroj FreeType môže čítať dáta písma z akéhokoľvek streamu, ktorý chcete.

veľa štastia