In MQL5 gibt es immer Raum für einen Exploit! ;) - Seite 5

 
sergeev:

Ich glaube nicht. Sie können keine Megabytes an Informationen über OBJ_TEXT übertragen.

der nächstliegende Kandidat sind Ressourcen

Hinweis: Ein Punkt ist eigentlich eine Struktur, die mit Variablen verschiedener Typen gefüllt ist. Sie wird beim Schließen/Öffnen des Terminals gespeichert und auch in einer Vorlage abgelegt.

 
DC2008:

Hinweis: Ein Punkt ist eigentlich eine Struktur, die mit Variablen verschiedener Typen gefüllt ist. Sie wird beim Schließen/Öffnen des Terminals gespeichert und ist auch in der Vorlage enthalten.

?
 
sergeev:

Ich frage immer wieder: Haben Sie schon eine Lösung für DLL 32/64 gefunden?

Es gibt eine Art WOW32reg.exe im System (\System32\). Ich habe herumprobiert, es reagiert nicht auf -h -?, ich konnte nichts blind registrieren.

Google schweigt auch, ich konnte auf microsoft.com nichts finden... das ist also ziemlich cool.

 
sergeev:
?

Was ist nicht klar? Geben Sie mir eine konkrete Aufgabe, aber es ist alles ein Umweg...?

 
MetaDriver:

Ich frage immer wieder: Haben Sie schon eine Lösung für DLL 32/64 gefunden?

Es gibt eine Art WOW32reg.exe im System (\System32\). Ich habe herumprobiert, es reagiert nicht auf -h -?, ich konnte nichts blind registrieren.

Google ist auch stumm, auf microsoft.com konnte ich nichts finden... im Allgemeinen ist es akut.

Das ist nur eine Idee, ich habe es nicht selbst ausprobiert. Nachdem Sie die Bittiefe des Terminals ermittelt haben, verwenden Sie LoadLibrary, um die DLL dynamisch zu laden.

 
MetaDriver:

Ich frage weiter, haben Sie schon eine Lösung für DLL 32/64 gefunden?

Was ist hier das Problem?

Beim Import geben Sie zwei identische Funktionen an, nur mit unterschiedlichen Parametern (int/long). Im Programm rufen Sie, je nach 32/64 Bit, die entsprechende Funktion auf.

 
MetaDriver:

Ich frage weiter, haben Sie schon eine Lösung für DLL 32/64 gefunden?

Der Code für den Aufruf von Funktionen aus den Windows-Funktionen (bei der Übergabe von Zeigern auf sie) - ich habe ihn.

Dank context :: ist alles sauber gelöst.


Yurich:

Beim Import geben Sie zwei identische Funktionen an, nur mit unterschiedlichen Parametern (int/long). Im Programm rufen Sie, je nach 32/64 Bit, die entsprechende Funktion auf.


Z.B. so:

#import "MemMap32.dll"
int MemRead(HANDLE32 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz
#import "MemMap64.dll"
int MemRead(HANDLE64 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz
#import

// переопределяем вызовы для контроля битности
int MemRead(HANDLE64 h, int &v[], int pos, int sz, int &error) { if (_IsX64) return(MemMap64::MemRead(h, v, pos, sz, error)); return(MemMap32::MemRead((HANDLE32)h, v, pos, sz, error));  }
in einem Code, den Sie mit explizitem :: Kontext aufrufen.

::MemRead(...)


Das heißt, wir multiplizieren keine Funktionsnamen, sondern machen eine automatische Erkennung der Bitrate und rufen die richtige importierte Funktion auf.

 
MetaDriver:

Ich frage mich, ob Sie bereits eine Lösung für 32/64 DLL gefunden haben?

Am einfachsten ist es, gleichnamige x32- und x64-DLLs in verschiedenen Windows-Systemverzeichnissen abzulegen - SysWOW64 bzw. System32.

Aber der Datenaustausch zwischen den Programmen ist ein echtes Problem, vor allem, wenn man ihn unüberlegt angeht.
So wahrscheinlich argumentiert und Microsoft, wenn in den neunziger Jahren des letzten Jahrhunderts, ging von einer Datei, Stream-Austausch für Objekt - OLE von ihm zu ActiveX -> COM -> COM + -> .NET, dh auf der Grundlage einer Technologie der Inter-Programm-Austausch haben ein neues System der Programmierung und Code-Ausführung erstellt.

 
Yurich:

Was ist hier das Problem?

Beim Import geben Sie zwei identische Funktionen an, nur mit unterschiedlichen Parametern (int/long). Im Programm rufen Sie je nach Bitgröße 32/64 die entsprechende Funktion auf.

Es will die 32-Bit-Version überhaupt nicht laden, und es will das Programm auch nicht ausführen, wenn ich es (die DLL) nicht bereits aufrufe.

Wenn"Verwendung der DLL zulassen" nicht markiert ist, wird die Schaltfläche [OK] nicht angezeigt, sondern nur abgebrochen. Zulassen, OK klicken - das Programm stürzt ab. Deadlock.

2013.12.19 17:43:20.657 TestFFTdll      'E:\Programs\MetaQuotes_MT5\MQL5\Libraries\fft32.dll' is not 64-bit version


Idealerweise würde ich gerne dll32 im x64-Terminal aufrufen können. Ich weiß sicher, dass es theoretisch möglich ist, aber ich weiß nicht wie.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе - Документация по MQL5
 
MetaDriver:

Es will die 32-Bit-Version überhaupt nicht laden und das Programm auch nicht ausführen, wenn ich es nicht mehr aufrufe (dll).

Wenn"Allow dll" nicht angekreuzt ist, wird die Schaltfläche [OK] nicht angezeigt, sondern nur abgebrochen. Allow, OK anklicken - das Programm stürzt ab. Deadlock.


Idealerweise würde ich gerne dll32 im x64-Terminal aufrufen können. Ich weiß sicher, dass es theoretisch möglich ist, aber ich weiß nicht wie.

Ich habe es gerade überprüft:
2013.12.19 18:49:01.437    do (EURUSD,H1)    TEST
2013.12.19 18:49:01.436    do (EURUSD,H1)    Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:48:58.929    do    'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version
Die Bibliothek wird nicht geladen, aber alles funktioniert, bis ihre Funktion aufgerufen wird (TEST-Ausgabe);

Jetzt rufen wir die Funktion einer solchen Bibliothek auf:
2013.12.19 18:51:07.446    do (EURUSD,H1)    unresolved import function call
2013.12.19 18:51:07.446    do (EURUSD,H1)    Cannot call 'fnCrashTest', 'test.dll' is not loaded
2013.12.19 18:51:07.445    do (EURUSD,H1)    Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:51:05.107    do    'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version