06.11.2009, 15:26
|
#5
|
Участник
|
Цитата:
Сообщение от ivas
когдато давно взято с этого форума, возможно поможет
X++: #define.CP_ACP(0)
#define.CP_UTF8(65001)
static str Utf2Ansi(str Utf8)
{
DLL _kernelDLL = new DLL("KERNEL32");
DLLFunction MultiByteToWideChar = new DLLFunction(_kernelDLL, "MultiByteToWideChar");
DLLFunction WideCharToMultiByte = new DLLFunction(_kernelDLL, "WideCharToMultiByte");
Binary buf, buf1;
int len;
str res;
res = "";
if (Utf8)
{
buf = new Binary(strlen(Utf8));
buf.string(0, Utf8);
buf1 = new Binary((strlen(Utf8) + 1) * 2);
MultiByteToWideChar.returns(ExtTypes::DWord);
MultiByteToWideChar.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord,
ExtTypes::Pointer, ExtTypes::DWord);
if (MultiByteToWideChar.call(#CP_UTF8, 0, buf, strlen(Utf8) + 1, buf1, strlen(Utf8) + 1))
{
WideCharToMultiByte.returns(ExtTypes::DWord);
WideCharToMultiByte.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord,
ExtTypes::Pointer, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord);
len = WideCharToMultiByte.call(#CP_ACP, 0, buf1, strlen(Utf8) + 1, buf, 0, 0, 0);
if (len)
{
buf = new Binary(len);
if (WideCharToMultiByte.call(#CP_ACP, 0, buf1, strlen(Utf8) + 1, buf, len, 0, 0))
{
res = buf.string(0);
}
}
}
}
return res;
}
buf.string(0, Utf8);
На этом моменте падает в дебаггер  Пока понять не могу в чем дело.
На самом деле пытаюсь сделать наоборот из "что-то" в UTF8 , т.к. АутЛук по умолчанию его использует
|
|