inlinestd::wstring AnsiToUnicode(conststd::string &sSourceA, // Строка для преобразования.constint nCodePage) // Кодовая страница может быть одним из значений:// CP_ACP Системное умолчание Windows кодовых страниц ANSI.// CP_OEMCP Нынешняя система OEM кода страницы.// CP_MACCP Нынешняя система Macintosh код страницы.// CP_SYMBOL Символ кода страницы (42).// CP_THREAD_ACP Код Windows ANSI страницы для текущего потока. // CP_UTF7 UTF-7. Используйте это значение только тогда, когда вынужден от транспортного механизма 7-бит. Использование UTF-8 является предпочтительным.
{ // CP_UTF8 UTF-8.int nLength = 0;
std::wstring sStringW = L"";
if (sSourceA.size() == 0) return(sStringW);
if ((nLength = ::MultiByteToWideChar(nCodePage, 0, sSourceA.c_str(), -1, NULL, 0)) == 0) throw(_T("Ошибка в функции \"Utils::StringSTL::AnsiToUnicode()\". В строке отсутствуют символы."));
sStringW.resize(nLength - 1);
if ((nLength = ::MultiByteToWideChar(nCodePage, 0, sSourceA.c_str(), -1, LPWSTR(sStringW.c_str()), nLength)) == 0) throw(_T("Ошибка в функции \"Utils::StringSTL::AnsiToUnicode()\". Строка не преобразована."));
return(sStringW);
}
看了一下WinHttpConnect()。它没有多字节编码的实现。
我可以用一个DLL来加壳和转换吗?
不,我不需要它在DLL中,我知道这是一个选项,但这是错误的...
wininet.dll的所有功能都能工作,但Winhttp有这样一个愚蠢的错误......
如果你可以从Kernel32中调用GetLastError,但是mql4是有害的,不允许制作名称相同的函数,即使参数不同...
顺便问一下,你有没有试着在你的机器上运行这个脚本? 也许这只是我的问题?
我明白这是一个选择,但这不一样...
例如,它的所有功能都与wininet.dll一起工作,但在Winhttp中却有这样一个愚蠢的停滞。
如果你可以从Kernel32中调用GetLastError,但是mql4是有害的,不允许制作名称相同的函数,即使参数不同...
顺便问一下,你有没有试着在你的机器上运行这个脚本? 也许这只是我的问题?
我明白这是一个选项,但它并不是那样运作的......
例如,wininet.dll,它的所有功能都能工作,但Winhttp有这样一个愚蠢的停顿。
如果你可以从Kernel32中调用GetLastError,但是mql4是有害的,不允许制作名称相同的函数,即使参数不同...
GetLastError()应该被低级别调用 -->RtlGetLastWin32Error()。伊尔努尔在他的时代就建议这样做。这里有一些如何使用它的例子。
WinHttpConnect() 在MQL4 中不会工作。
在MQL4 中,没有任何东西能与WinHttpConnect() 一起工作。
你可以尝试转换。
如果我有时间,我将尝试做一个例子。否则...这个C++代码应该被转换为MQL4。
wstring应该被替换成一个ints数组,在重新计算大小时应该考虑到这一点。你可以尝试转换。
如果我有时间,我将尝试做一个例子。否则...这个C++代码应该被转换为MQL4。
wstring需要被替换成一个ints数组,并在重新计算大小时将其考虑在内。我是这样想的。
我有这个。
EMNIP,标准并不保证字符串在连续的内存块中的位置,所以使用&sStringW[0]结构是有问题的。
基本上是同样的鸡蛋。但我的是100%符合标准的:)
EMP,标准不保证字符串在一个连续的内存块中的位置,所以使用&sStringW[0]结构充满了危险。
一般来说,同样的鸡蛋。但我的是100%符合标准的:)
我不知道...
好吧,似乎所有(可能是所有)微软的实现都没有问题,我不能为其他的人担保。