Dieser Code hat für mich einwandfrei funktioniert, bis ich ihn in MT4 build 600 getestet habe, wo er Konten von meinem Server nicht mehr verifiziert.
Vielen Dank für Ihren Vorschlag angevoyageur, aber ich habe versucht, alle ansi 'A' zu W zu wechseln, aber immer noch keine Würfel.
Ihr Problem wird mit InternetReadFile() sein. Siehe EasyXml.mqh auf https://www.mql5.com/en/code/1998 für ein Beispiel, wie man WinInet-Funktionen im neuen MQL4 verwendet - der Code funktioniert sowohl in MQL4 als auch in MQL5.
Im Wesentlichen übergeben Sie ein uchar[]-Array an InternetReadFile() und konvertieren das Array dann mit CharArrayToString() in einen String. In MQL4 können Sie nun verwaltete Speicherpuffer beliebiger Länge zuweisen, sie an eine DLL übergeben und dann die Daten je nach Bedarf in Ansi oder Unicode konvertieren.
Im Wesentlichen übergeben Sie ein uchar[]-Array an InternetReadFile() und konvertieren das Array dann mit CharArrayToString() in einen String. In MQL4 können Sie nun verwaltete Speicherpuffer beliebiger Länge zuweisen, sie an eine DLL übergeben und dann die Daten je nach Bedarf in Ansi oder Unicode konvertieren.
Um das Thema und die Antwort etwas zu erweitern... in der neuen MQL4 ist es möglich, entweder die A- oder die W-Version vieler Funktionen aufzurufen. Das folgende Skript ruft zum Beispiel das temporäre Windows-Verzeichnis sowohl mit GetTempPathA als auch mit GetTempPathW auf:
#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); }
Daher ist es möglich, viele Ansi-only DLL-Aufrufe von der neuen MQL4 weiter zu verwenden: Es ist nicht unbedingt notwendig, sowohl den MQL4-Code als auch die DLL zu aktualisieren.
Daher ist es möglich, viele Ansi-only DLL-Aufrufe von der neuen MQL4 weiter zu verwenden: nicht unbedingt eine Notwendigkeit, sowohl den MQL4-Code und die DLL zu aktualisieren.
... Ein weiteres Beispiel: Übergabe von String-Werten in einen Ansi-DLL-Aufruf aus dem neuen MQL4. (Im wirklichen Leben würden Sie natürlich nur MessageBoxW aufrufen, anstatt diesen Workaround zu verwenden, um MessageBoxA aufzurufen, aber der allgemeine Punkt ist nützlich)
#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); }
Ich habe jetzt ein paar Stunden damit herumgespielt, aber immer noch kein Glück. Also ja, suchen Sie jemanden zu mieten, dies für mich zu tun ;)
Ich habe jetzt ein paar Stunden damit herumgespielt, aber immer noch kein Glück. Also ja, suchen Sie jemanden zu mieten, dies für mich zu tun ;)
Siehe https://www.mql5.com/en/forum/149360 - Ich wollte dies als Antwort hier posten, fand dann aber ein Problem...
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Dieser Code hat für mich einwandfrei funktioniert, bis ich ihn in MT4 build 600 getestet habe, wo er Konten von meinem Server nicht mehr verifiziert.