Aufrufen von Funktionen aus der DLL und Rückgabe von Ergebnissen - Seite 5

 
Geschützt ist gut, streng arm ist schlecht. Und wie sicher ist es, wenn man eine Intelligenzbestie anrufen kann? :) Obwohl Sie natürlich auch Anrufe von dll usw. verbieten können. FindFirst und FindNext benötigte ich, als ich eine Idee hatte, eine Reihe von Aufgaben zur Ausführung an die Verzeichnisdateien des Expert Advisors zu senden, damit er sie durchsuchen und ausführen kann. Das erwies sich als absurd.
 
Und wie sicher ist die DLL, wenn sie aufgerufen werden kann? :)

Schauen Sie einfach in die Einstellungen - alles ist deaktiviert (DLLs sind standardmäßig deaktiviert):

 
Dessen bin ich mir bewusst, als ich meine DLL angeschlossen habe. Aber wenn Sie die DLL importieren dürfen, von welcher Art von Schutz sprechen Sie dann?
 
Standardmäßig ist jeder Import aus einer DLL _völlig_ verboten. Das ist der Schutz.
Wenn man externe DLLs verwenden möchte, aktiviert man einfach die Schaltfläche "Jeden DLL-Funktionsaufruf bestätigen" und sieht, was aufgerufen wird. Auch das ist ein Schutz. Genauso wie der Schutz aller eingebetteten Dateioperationen mit Zugriff nur auf die Verzeichnisse /history und /files.
 
2 mike: Entschuldigung für die dumme Frage. Ich kann keine in Delphi kompilierten DLLs ausführen. Ich stieß auch auf ein ähnliches Problem mit Pol ("Übergabe von Arrays und Strings in DLL (Delphi)"), aber niemand hat es dort beantwortet. Können Sie uns sagen, wie das für Sie möglich war?
 
Wo liegt das Problem? Hier ist ein Beispiel für eine funktionierende dll (ich habe alles Unwichtige weggelassen):

Bibliothek MetaDLL;

verwendet
SysUtils,
Klassen,
Fenster;

{$R *.res}

{-----Initialize-------------------------------------------------------------}
procedure InitDllData(Währungsname: PChar); stdcall;
beginnen
// etwas tun
Ende;

{-----Finalize---------------------------------------------------------------}
procedure FreeDllData; stdcall;
beginnen
// etwas tun
Ende;

{-----Process tick-----------------------------------------------------------}
procedure ProcessTick(Währungsname: PChar; bid, ask: double; time: integer); stdcall;
var
f: Datei;
DateTime: TDateTime;
beginnen
Versuchen Sie
AssignFile(f, WorkDir + CurrencyName + '.tik');
Versuchen Sie
zurücksetzen(f, 1);
außer
rewrite(f, 1);
Ende;

Versuchen Sie
DateTime := MTTimeToNormal(time);
seek(f, FileSize(f));
BlockWrite(f, DateTime, sizeof(DateTime));
BlockWrite(f, bid, sizeof(bid));
schließlich
CloseFile(f);
Ende;
außer
//
Ende;
Ende;


Ausfuhren
ProcessTick, InitDllData, FreeDllData;

Ende.

Vergessen Sie nicht, alle Ihre Funktionen als stdcall einzustellen, verwenden Sie nur Standard-Windows-Typen (Strings nur als PChar), vergessen Sie auch nicht, in der Export-Direktive alle Ihre exportierten Funktionen anzugeben und Sie werden zufrieden sein.

Ja, und sehen Sie sich auch das von Renat gepostete Bild an, wie man die Verwendung von dll in EA erlaubt.
 
Ich vergaß auch hinzuzufügen, dass sich die dll im Ordner <metatrader>\experts\libraries\ befinden und im Code des Expert Advisors wie folgt verbunden sein sollte:

#import "MetaDLL.dll"
void ProcessTick(string CurrencyName, double aBid, double aAsk, int aTime);
void InitDllData(string CurrencyName);
void FreeDllData();

und dann können Sie jede Funktion aufrufen
 
Vielen Dank für die Hilfe. Es stellte sich heraus, dass es nur ein falsch aufgerufenes Array als Parameter einer Funktion war, die von der DLL aufgerufen wurde
 
Wo liegt das Problem? Hier ist ein Beispiel für eine funktionierende dll (ich habe alles Unwichtige entfernt):<br / translate="no">
Bibliothek MetaDLL;

verwendet
SysUtils,
Klassen,
Fenster;
...


Sorry für eine weitere dumme Frage: Ist es möglich, VCL in dieser DLL zu verwenden (um genauer zu sein, war es möglich für Sie)? Denn wenn ich "form" mit ddl verbinde, stürzt MetaTrader immer noch mit "error" beim Start ab (oder wenn ich einen entsprechenden Expert Advisor verbinde).
Ich bin eigentlich nur daran interessiert, TDatabase, TDataSource, TQuery
 
2 Mikrofon
Ich bin sehr an Ihrem Emulator interessiert, den Sie an der Geschichte üben können. Soweit ich weiß, wird MT es leider nicht schaffen. Wie ich verstanden habe, wollen Sie es nicht wirklich verkaufen, weil Sie gutes Geld mit Forex verdienen. Aber ich habe schon lange im Internet nach etwas Ähnlichem gesucht, bisher ohne Erfolg. Ich würde mich freuen, wenn Sie mir Ihre Entwicklung zur Verfügung stellen. Ich kann Ihnen MTS anbieten, das ist vielleicht das einzige, was Sie interessiert.
Ich hoffe auf Ihre Mitarbeit, Alexander. f1-forum@mail.ru