/ / Могат ли функциите freetype да приемат имена на Unicode? - c ++, визуално студио, unicode, freetype

Може ли freetype функции да приемат Unicode имена на файлове? - c ++, визуално студио, unicode, freetype

Имам един MSVC проект, който използва freetype, а сега се опитвам да го преместя в Unicode. Но freetype функциите не приемат LPCTSTR аргументи за файлови пътища, те искат "const char *". Така че код като

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

използвани за работа, когато проектът е ASCII, но не повече, когато това е Unicode.Има ли начин да се freetype приема Unicode имена на файлове, някои препроцесор определят да го превключите на unicode може би?

Отговори:

4 за отговор № 1

Няма стандарт за C ++ (2003). Тъй като freetype е предназначен да бъде преносим, ​​той използва само fopen, който може да приема само const char * имена на файлове. Така че, или заредете файла в паметта (или я паметта) и след това използвайте FT_New_Memory_Face, за да създадете шрифт или да конвертирате wchar_t pszFileName в 8-битово кодиране, като потенциално губите знаци поради невъзможно преобразуване.

На Linux, можете да опитате да използвате setlocale така че fopen ще приеме UTF8 струни, конвертирай wchar_t низ в UTF8. въпреки това на прозорците тя няма да работи</a>, Така че, заредете файла в паметта или преобразувайте pszFileName в 8-битово кодиране, след което го предайте на FT_New_Face.


1 за отговор № 2

Вашият най-добър залог е вероятно да следвате конвенциите на рамката и да импортирате tchar.h, след това използвайте _tfopen вместо (и преминаване към LPCTSTR, _T("your_string")и т.н.). Това ще ви позволи да компилирате същия код за Linux и Windows почти без промяна, като същевременно поддържате UTF-16 или utf-8 в кода.


0 за отговор № 3

Можете да използвате метода FT_Open_Face и се нуждаете от негоFT_Open_Args структурира като аргумент. В FT_Open_Args.stream можете да зададете митническо четене и затваряне на обратната връзка и FreeType може да чете данни от всеки поток, който искате.

късмет