Собственно сабж, перепробывал способы с WideCharToMultyByte, так же пробовал с wcstombs результат никакой, нормально отображаются только английские буквы (: кто нибудь сталкивался с такой проблемой?
Booster ну переводит английские буквы она как надо, а вот русские выдает в виде "кракозябр", хотя CodePage установлен 1251, так же setlocale (LC_CTYPE, "Russian_Russia.1251") + wcstombs ситуацию не изменили ...
char* ToAnsi(WCHAR *String) { typedef char * (*MSETLOCALE )(int, const char *); typedef size_t (*MWCSTOMBS)( char *, const wchar_t *, size_t ); MSETLOCALE psetlocale = (MSETLOCALE)GetProcAddress( LoadLibrary("msvcrt.dll"), "setlocale" ); MWCSTOMBS pwcstombs = (MWCSTOMBS)GetProcAddress( LoadLibrary("msvcrt.dll"), "wcstombs" ); int l = WideCharToMultiByte (1251, 0, String, -1, 0, 0, NULL, NULL); char *r = (char*)VirtualAlloc( NULL, l, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE ); psetlocale (LC_CTYPE, "Russian_Russia.1251"); pwcstombs( r, String, l ); return r; } ----- char* ToAnsi(WCHAR *String) { int l = WideCharToMultiByte (1251, 0, String, -1, 0, 0, NULL, NULL); char *r = (char*)VirtualAlloc( NULL, l, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE ); WideCharToMultiByte (1251, 0, String, -1, r, l, NULL, NULL); return r; }
блин вставить тег кода забыл, а редактирование убрали (: вот внятно: Код (Text): char* ToAnsi(WCHAR *String) { typedef char * (*MSETLOCALE )(int, const char *); typedef size_t (*MWCSTOMBS)( char *, const wchar_t *, size_t ); MSETLOCALE psetlocale = (MSETLOCALE)GetProcAddress( LoadLibrary("msvcrt.dll"), "setlocale" ); MWCSTOMBS pwcstombs = (MWCSTOMBS)GetProcAddress( LoadLibrary("msvcrt.dll"), "wcstombs" ); int l = WideCharToMultiByte (1251, 0, String, -1, 0, 0, NULL, NULL); char *r = (char*)VirtualAlloc( NULL, l, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE ); psetlocale (LC_CTYPE, "Russian_Russia.1251"); pwcstombs( r, String, l ); return r; } ----- char* ToAnsi(WCHAR *String) { int l = WideCharToMultiByte (1251, 0, String, -1, 0, 0, NULL, NULL); char *r = (char*)VirtualAlloc( NULL, l, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE ); WideCharToMultiByte (1251, 0, String, -1, r, l, NULL, NULL); return r; }
всем мои дикие извинения туплю второй день, оказывается переводит все правильно просто дальше идёт работа с рег. выражениями, видимо там криво переводится, вобщем тему можно закрыть, всем спасибо