Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1177

 
Alexey Viktorov:

Haben Sie versucht, eine Zeichenkette als #define str "long long string" oder sogar als zwei Zeichenketten über + oder die String-Funktion zu verschieben.

Immerhin ist Comment auch in der Länge der Zeichenkette begrenzt, aber Variablen lassen sich so weit schieben, dass sie nicht in wenigen Zeilen auf den Bildschirm passen.

Danke, die Kurzschrift funktioniert wirklich, der Compiler versteht zwar, akzeptiert aber keine dekodierten Funktionen (ich glaube, so heißt das) mit @. Und der alte Compiler akzeptiert solche Funktionen, fügt sie aber nicht zur Importsubstitution hinzu und nimmt sie wörtlich. Wenn ich Funktionen wie in der dll-Dokumentation importiere, d.h. "TRANS2QUIK_CONNECT" anstelle von "_TRANS2QUIK_CONNECT@16", wird 2 zurückgegeben (TRANS2QUIK_QUIK_TERMINAL_NOT_FOUND). Ich verstehe den Unterschied nicht.
 
f1nik:
Danke, in der Tat funktioniert die Kurzschrift, der Compiler versteht zwar, akzeptiert aber keine dekodierten Funktionen (ich glaube, so heißt das) mit @. Und der alte Compiler akzeptiert solche Funktionen, fügt aber keine wörtlich zu nehmenden Importersatzteile hinzu. Wenn ich Funktionen wie in der dll-Dokumentation importiere, d.h. "TRANS2QUIK_CONNECT" anstelle von "_TRANS2QUIK_CONNECT@16", wird 2 zurückgegeben (TRANS2QUIK_QUIK_TERMINAL_NOT_FOUND). Ich verstehe den Unterschied nicht.
Öffnen Sie die dll-Datei im Hex-Editor, blättern Sie ein wenig und Sie können die symbolischen Namen der Einstiegspunkte sehen. Oder finden Sie einen DLL-Explorer, der dies für Sie erledigt und gleichzeitig die Abhängigkeiten anzeigt.

Ich bin mir übrigens nicht sicher, ob das funktioniert, denn wenn die Eingabepunkte nicht stdcall sind, kann man nicht auf das Auffüllen verzichten.
 
f1nik:
Danke, die Reduktion funktioniert, der Compiler versteht zwar, akzeptiert aber keine dekodierten Funktionen (ich glaube, so heißt es) mit @. Und der alte Compiler akzeptiert solche Funktionen, fügt aber keine wörtlich zu nehmenden Importsubstitute hinzu. Wenn ich Funktionen wie in der dll-Dokumentation importiere, d.h. "TRANS2QUIK_CONNECT" anstelle von "_TRANS2QUIK_CONNECT@16", wird 2 zurückgegeben (TRANS2QUIK_QUIK_TERMINAL_NOT_FOUND). Ich verstehe den Unterschied nicht.

Ich weiß nicht, wo es in der Dokumentation steht, aber dem Platzhalter muss ein Schrägstrich vorangestellt werden. Deshalb sollte die Adresszeile wie folgt aussehen: C:\ordner\datei

Versuchen Sie also, es so zu schreiben:"_TRANS2QUIK_CONNECT\@16"

Eigentlich kenne ich mich mit .dlls nicht so gut aus. Wenn das also nicht funktioniert, dann...

 

@Maxim Kuznetsov Ich öffnete dll in WinHex und Dependency Walker es generiert Ordinal, Hint, Funktion, Entry Point und es generiert Funktionsnamen wie(_TRANS2QUIK_CONNECT@16) mit ihnen die alten Compiler arbeitet und gibt dll Ergebnisse. Meinen Sie diese symbolischen Namen?

@Alexey Viktorov Ich bin selbst kein Experte im Programmieren, aber meine bescheidenen Kenntnisse reichten aus, um meine Idee umzusetzen. Abschirmung \\ funktioniert nicht.

Gefunden automatische Proxy dll Generator in Python https://github.com/mavenlin/Dll_Wrapper_Gen . Dachte, es funktioniert für mich im Grunde ändern nur Funktionsnamen in der gebauten dll. Versucht, es zu bauen, ohne Änderungen Compiler schwört auf @ in Funktionsnamen. Generiert cpp Stück

#include <windows.h>
#include <stdio.h>
HINSTANCE mHinst = 0, mHinstDLL = 0;
UINT_PTR mProcs[68] = {0};

LPCSTR mImportNames[] = {"_TRANS2QUIK_CONNECT@16"};
BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved ) {
        mHinst = hinstDLL;
        if ( fdwReason == DLL_PROCESS_ATTACH ) {
                mHinstDLL = LoadLibrary( "ori_TRANS2QUIK.dll" );
                if ( !mHinstDLL )
                        return ( FALSE );
                for ( int i = 0; i < 68; i++ )
                        mProcs[ i ] = (UINT_PTR)GetProcAddress( mHinstDLL, mImportNames[ i ] );
        } else if ( fdwReason == DLL_PROCESS_DETACH ) {
                FreeLibrary( mHinstDLL );
        }
        return ( TRUE );
}

extern "C" __declspec(naked) void __stdcall _TRANS2QUIK_CONNECT@16_wrapper(){__asm{jmp mProcs[0*4]}}

Teil der generierten Def-Datei

LIBRARY TRANS2QUIK.dll
EXPORTS
        _TRANS2QUIK_CONNECT@16=_TRANS2QUIK_CONNECT@16_wrapper @1

Ich verstehe, dass_TRANS2QUIK_CONNECT@16 _wrapper der Name der Funktionen ist, die von der Proxy-DLL aus sichtbar sein werden. Also habe ich es aufCONNECT reduziert. Die DLL wird erstellt, aber das Terminal zeigtTRANS2QUIK_QUIK_TERMINAL_NOT_FOUNDan.Ich glaube, das ist nichts für mein Gehirn. Ich werde das Handelssystem manuell überprüfen und dort dll bestellen müssen.

 
f1nik:

@Maxim Kuznetsov Ich öffnete dll in WinHex und Dependency Walker es generiert Ordinal, Hint, Funktion, Entry Point und es generiert Funktionsnamen wie(_TRANS2QUIK_CONNECT@16) mit ihnen die alten Compiler funktioniert und gibt dll Ergebnisse. Meinen Sie diese symbolischen Namen?

@Alexey Viktorov Ich bin selbst kein Experte im Programmieren, aber meine bescheidenen Kenntnisse reichten aus, um meine Idee umzusetzen. Abschirmung \\ funktioniert nicht.

Gefunden automatische Proxy dll Generator in Python https://github.com/mavenlin/Dll_Wrapper_Gen . Ich dachte, es würde im Wesentlichen funktionieren, wenn ich nur die Funktionsnamen in der assemblierten DLL ändern würde. Es wurde ein Projekt für Visual Studio erstellt. Versucht, es ohne Änderungen zu bauen Compiler schwört auf @ in Funktionsnamen. generiert cpp Stück

Teil der generierten Def-Datei

Ich verstehe, dass_TRANS2QUIK_CONNECT@16 _wrapper der Name der Funktionen ist, die von der Proxy-DLL sichtbar sein werden. Also habe ich es aufCONNECT reduziert. Die DLL wird erstellt, aber das Terminal zeigtTRANS2QUIK_QUIK_TERMINAL_NOT_FOUNDan.Ich glaube, das ist nichts für mein Gehirn. Ich werde das Handelssystem manuell überprüfen und dort dll bestellen müssen.

Sie haben kein Wort über die Bittiefe von Terminal und DLL verloren. Und das ist wichtig.

 

@Koldun Zloy Tried Trans2QuikAPI_1.2 es ist 32 bit mit mt4 und quik 7, und auch Trans2QuikAPI_1.3_x64 mit mt5 und quik 8 es ist wie 64 bit nur. Ich habe externe Transaktionen in Quik selbst aktiviert. Ich dachte, ich hätte die falsche Funktion zum Importieren. Ich habe es selbst geschrieben.

int _TRANS2QUIK_CONNECT@16(string lpcstrConnectionParamsString, int& pnExtendedErrorCode[], string lpstrErrorMessage, int dwErrorMessageSize);
В новом компиляторе mt4 можно только так

int _TRANS2QUIK_CONNECT(string lpcstrConnectionParamsString, int& pnExtendedErrorCode[], string lpstrErrorMessage, int dwErrorMessageSize);
В h файле который есть в архиве с dll написано так long TRANS2QUIK_API __stdcall TRANS2QUIK_CONNECT (LPSTR lpstConnectionParamsString,long* pnExtendedErrorCode, LPSTR lpstrErrorMessage, DWORD dwErrorMessageSize);

Art der gleichwertigen Datentypen. Wenn es nicht richtig gewesen wäre, hätte es mit dem alten Compiler wohl nicht funktioniert.

 
Auf jeden Fall ist es möglich, die DLL zu verbinden. Wenn Sie zuerst eine dekodierte Funktion aufrufen(_TRANS2QUIK_CONNECT@16), dann funktionieren mindestens zwei nicht dekodierte Funktionen. Vielen Dank an alle, die geantwortet haben.
 
Wie kann ich die Testgeschwindigkeit bei mt5 programmatisch steuern? Es steht nicht eindeutig im Handbuch, dass Sleep() im Tester nicht verwendet werden kann, aber es scheint nicht zu funktionieren...
Sie müssen die Prüfgeschwindigkeit zu einem bestimmten Zeitpunkt verringern. Manuell ist es schwer, all diese Momente zu erfassen...
 
Hallo! Ich habe ein Panel erstellt, das aus Hintergrund und Schaltflächen in MQL5 besteht. Beim Ziehen des Bedienfelds bewegt sich nur der Hintergrund, die Schaltflächen bleiben an ihrem Platz, und erst beim nächsten Häkchen bewegen sich die Schaltflächen hinter den Hintergrund an die gewünschte Stelle. Bitte geben Sie mir Tipps, wie ich die Schaltflächen und den Hintergrund gleichzeitig bewegen kann. Vielen Dank im Voraus!
 
Mikhail:
Hallo! Ich habe ein Panel bestehend aus Hintergrund und Schaltflächen in MQL5 erstellt. Wenn ich das Panel ziehe, bewegt sich nur der Hintergrund und die Schaltflächen bleiben, wo sie sind, und erst beim nächsten Ticken bewegen sie sich hinter den Hintergrund an die gewünschte Stelle. Bitte geben Sie mir Tipps, wie ich die Schaltflächen und den Hintergrund gleichzeitig bewegen kann. Vielen Dank im Voraus!

Reden wir über das Testgerät oder online?

Wenn Sie online sind - sehen Sie sich den Code an, das Ereignis "Verschieben" wird nicht richtig weitergeleitet. Panels durch die Art und Weise auf der Website nur fünf verschiedene Bibliotheken, was meinst du?

Und im Tester - es scheint, es gibt keine Möglichkeit, und warum.

Grund der Beschwerde: