谢谢你的建议,但我试着把所有的 "A "换成 "W",但仍然没有结果。
thili55:
谢谢你的建议,但我试着把所有的Ansi'A'换成W,但还是没有结果。
谢谢你的建议,但我试着把所有的Ansi'A'换成W,但还是没有结果。
你的问题将与InternetReadFile()有关。关于如何在新的MQL4中使用WinInet函数的例子,请参见EasyXml.mqh,网址是https://www.mql5.com/en/code/1998- 该代码在MQL4和MQL5中都可以使用。
实质上,你将一个ucar[]数组传递给InternetReadFile(),然后使用CharArrayToString()将该数组转换为一个字符串。在MQL4中,你现在实际上可以做的是分配任意长度的托管内存缓冲区,将它们传递给DLL,然后根据情况将数据从Ansi或Unicode转换。
gchrmt4:
从本质上讲,你把一个ucar[]数组传给InternetReadFile(),然后用CharArrayToString()把数组转换为一个字符串。在MQL4中,你现在实际上可以做的是分配任意长度的托管内存缓冲区,将它们传递给DLL,然后根据情况将数据从Ansi或Unicode转换。
稍微扩大一下话题和答案......在新的MQL4中,有可能调用许多函数 的A或W版本。例如,下面的脚本同时使用GetTempPathA和GetTempPathW调用来获取Windows临时目录。
#import "kernel32.dll" int GetTempPathA(int,uchar & arr[]); int GetTempPathW(int,short & arr[]); #import void OnStart() { uchar AnsiStringBuffer[256]; GetTempPathA(255, AnsiStringBuffer); string strTempPathFromA = CharArrayToString(AnsiStringBuffer); short UnicodeStringBuffer[256]; GetTempPathW(255, UnicodeStringBuffer); string strTempPathFromW = ShortArrayToString(UnicodeStringBuffer); Print("Temp path via GetTempPathA(): ", strTempPathFromA); Print("Temp path via GetTempPathW(): ", strTempPathFromW); }
因此,在新的MQL4中可以继续使用许多只用Ansi的DLL调用:不一定需要同时更新MQL4代码和 DLL。
gchrmt4:
因此,有可能继续使用新的MQL4中的许多纯Ansi的DLL调用:不一定需要同时更新MQL4代码和 DLL。
......另一个例子:从新的MQL4中向 Ansi DLL调用传递字符串值。(在现实生活中,你显然会直接调用MessageBoxW,而不是使用这种变通方法来调用MessageBoxA,但一般的观点是有用的)
#import "user32.dll" // Declare the Ansi function as taking uchar[] input parameters instead of strings int MessageBoxA(int,uchar & arr1[],uchar & arr2[],int); #import void OnStart() { string strMessage = "Hello"; string strTitle = "Hi!"; // Convert the strings to uchar[] arrays uchar ucMessage[], ucTitle[]; StringToCharArray(strMessage, ucMessage); StringToCharArray(strTitle, ucTitle); MessageBoxA(0, ucMessage, ucTitle, 64); }
谢谢gchrmt4的详细解释,不幸的是,我不是什么程序员,所以我似乎无法自己解决这个问题。我正在看我的代码和你发布的例子,不知道该怎么做,所以看起来我可能要找人帮我做这个。
我已经玩了几个小时了,还是没有收获。所以,我想请人帮我做这件事;)
thili55:
我已经玩了几个小时了,还是没有收获。所以,我想请人帮我做这件事;)
https://www.mql5.com/en/job
我已经玩了几个小时了,还是没有收获。所以,我想请人帮我做这件事;)
thili55:
我已经玩了几个小时了,还是没有收获。所以,我想请人帮我做这件事;)
见https://www.mql5.com/en/forum/149360- 我正准备把这个作为答案贴在这里,但后来发现了一个问题......
我已经玩了几个小时了,还是没有收获。所以,我想请人帮我做这件事;)
...然而,该脚本对于检索短的服务器响应,如许可查询的结果,应该仍然有效。只有当服务器的响应大小超过1KB左右时才会有问题。
这段代码对我来说是完美无缺的,直到在MT4 build 600中测试时,它不再能从我的服务器上验证账户。