Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Funktionen werden nach bestimmten Regeln aufgerufen - Aufrufkonvention. MT4 arbeitet garantiert mit Funktionen, die sich an __stdcall halten (ein Spezialfall einer Regelvariante). Um sicher zu sein, dass die exportierte Funktion die oben genannten Regeln verwendet, sollte sie wie folgt aussehen: void __stdcall AnyFn();
2. Ich kenne zwei Möglichkeiten, Bibliotheksfunktionen zu exportieren - mit __declspec(dllexport) und mit def file (das ist einfacher, sonst muss man sich zusätzlich mit Funktionsdekodierung herumschlagen). Um in VS die def-Datei in das Projekt einzubinden, fügen Sie sie zuerst zu den Projektdateien hinzu, dann fügen Sie den Dateinamen zu: project properties/composer/input/module definition file.
P.S.: Das Beispielprojekt mit der Def-Datei befindet sich in: Terminalverzeichnis\ experts\samples\DLLSample.
ÜBERGABE VON PARAMETERN AN EINE DLL-FUNKTION
1. Bei der Übergabe von String-Variablen wird ein Array von char (ANSI-Zeichen, benötigt 1 Byte) an die DLL übergeben.
2. Die Übergabe von int oder double an die Bibliothek führt dazu, dass die Variable kopiert wird. Wenn Sie also die Variable in der DLL ändern, gibt es keine Änderung in der DLL:
3. Um in MQL deklarierte int- und double-Variablen ändern zu können, sollten Arrays übergeben werden:
4. Bei der Übergabe eines Arrays aus String wird struct MqlStr an die DLL übergeben:
P.S.
Wann immer ein Array oder eine Zeichenkette (String) an die DLL übergeben wird, handelt es sich eigentlich um einen Zeiger auf einen Speicherabschnitt (Pointer), der wie folgt an die Bibliothek übergeben wird
void __stdcall fn(int *pointer) {} // wie hier. Auf diese Weise können Sie als Array arbeiten, zum Beispiel pointer[4] = 4.
void __stdcall fn(int &reference) {} // oder so. Wir erhalten jedoch nur Zugriff auf ein Element, was relevant ist, wenn ein Array mit einem Element an die Bibliothek übergeben wird.
Ich konnte keine richtige Erklärung für das * vor dem Zeiger finden, wofür ist es? Ist es nicht möglich, auf sie zu verzichten ?????
Und eine Frage zur Art und Weise, wie man Text aus einer DLL abrufen kann...
Ich konnte keine richtige Erklärung für das * vor dem Zeiger finden, wofür ist es? Ist es nicht möglich, auf sie zu verzichten ?????
Und eine Frage zur Art und Weise, wie man Text aus einer DLL abrufen kann...
1. Übertragen einer Zeichenfolge an den IDC:
2. Das Zeichen * zeigt an, dass es sich um einen Zeiger handelt. Kurz gesagt, jede Variable hat nicht nur einen Wert, sondern auch eine Adresse, an der sie sich im Speicher befindet. Zeiger können mit dieser Adresse arbeiten. Dies ist ein Thema, das gut verstanden werden muss, ich denke, Sie sollten sich die C++-Bücher ansehen;1. Übertragen einer Zeichenfolge an den IDC:
2. Das Zeichen * zeigt an, dass es sich um einen Zeiger handelt. Kurz gesagt, jede Variable hat nicht nur einen Wert, sondern auch eine Adresse, an der sie sich im Speicher befindet. Zeiger können mit dieser Adresse arbeiten. Das ist ein Thema, das gut verstanden werden muss, also sollten Sie sich vielleicht ein paar C++-Bücher ansehen;Sie müssen nur mit den globalen Daten in der Bibliothek vorsichtig sein. Die MCL-Programme laufen unabhängig voneinander (teilen sich aber globale Variablen, da sie sich im selben Thread befinden), daher ist es möglich, dass mehrere Skripte in denselben Speicherplatz schreiben und lesen (was nicht gut ist). Dies erfordert eine Synchronisierung, z. B. durch die Verwendung kritischer Abschnitte. Ich betone, dass dies für globale Daten (außerhalb von Funktionen deklariert) gilt. Wenn Funktionen aufgerufen werden, wird ein eigener, unabhängiger Satz von Variablen erstellt.