Guter Artikel, aber er wirft einige große Bedenken auf.
5. DLL calls wrapper and loss of speed on calls As already described above, every call of DLL functions is wrapped into a special wrapper in order to ensure safety. This binding masks the basic code, replaces the stack, supports stdcall / cdecl agreements and monitors exceptions within the functions called. This work inevitably leads to delay of the calling function. Therefore, it isn't recommended to perform very frequent DLL function calls (hundreds or thousands of times per second) for small operations. It' s better to make infrequent calls.
Ich bin für zusätzlichen Schutz für die Anwendung, aber nicht auf Kosten der Leistung. Dies ist eine weitere Änderung von MT4, wie Ausnahmen in dlls MT4 zum Absturz bringen, aber gut geschriebenen Code sollte dieses Szenario zu behandeln, würde ich viel lieber sehen, Artikel über das Schreiben von sicheren Code in dlls, um diese Art von Problemen zu überwinden. Also jetzt aufgrund schlechter Kodierung Gewohnheiten jeder hat eine Leistung Kosten zu zahlen.
Dies ist sehr sehr schlecht, wenn Sie Bibliotheken von Algorithmen, die auf einem Tick Basen aufgerufen werden, würde ich wagen zu sagen, machen sie unbrauchbar. Angesichts viele der Rückmeldungen, die ich gesehen habe re MT5 ist nicht gut, vor allem aufgrund der Menschen, die Notwendigkeit, Indikatoren usw. neu zu schreiben, dies ist nur ein weiterer Punkt, der viel Frustration verursacht, und da es Auswirkungen auf die Leistung würde ich mir vorstellen, dass andere wie mich, die Benutzer umfangreiche Verwendung von DLL's nur mit MT4 so lange wie möglich bleiben und suchen Sie nach einer anderen Plattform, wo dies kein Problem ist.
Warum, oh warum konnte Metaquotes nicht einfach eine etwas andere Methode für den Aufruf von DLLs auf sichere Weise hinzufügen. Der Entwickler könnte dann wählen, ob er über sicheres Laden oder über leistungsfähiges Laden lädt und sicherstellen, dass er guten Code schreibt, der Ausnahmen abfängt.
"Es ist besser, seltene Aufrufe zu machen" Ich meine ernsthaft, was für eine Aussage ist das?
Ich kompilierte die DLL mit Visual C++ Express 2008, aber interessanterweise Terminal fängt nicht Ausnahme, aber stürzt innerhalb fnReplaceString.
Mein Terminal-Build ist 239. Irgendwelche Anhaltspunkte?
Ich kompilierte die DLL mit Visual C++ Express 2008 aber interessanterweise Terminal fängt nicht Ausnahme, aber stürzt innerhalb fnReplaceString.
Mein Terminal-Build ist 239. Irgendwelche Anhaltspunkte?
Guter Artikel, der jedoch einige große Bedenken aufwirft.
Ich bin alles für das Hinzufügen von Schutz für die Anwendung, aber nicht auf Kosten der Leistung. Dies ist eine weitere Änderung von MT4 als Ausnahmen in dlls MT4 zum Absturz bringen, aber gut geschriebenen Code sollte dieses Szenario zu behandeln, würde ich viel lieber sehen, Artikel über das Schreiben von sicherem Code in dlls, um diese Art von Problemen zu überwinden. Also jetzt wegen der schlechten Codierung Gewohnheiten jeder hat eine Leistung Kosten zu zahlen.
Dies ist sehr sehr schlecht, wenn Sie Bibliotheken von Algorithmen, die auf einem Tick Basen aufgerufen werden, würde ich wagen zu sagen, machen sie unbrauchbar. Angesichts viele der Rückmeldungen, die ich gesehen habe re MT5 ist nicht gut, vor allem aufgrund der Menschen, die Notwendigkeit, Indikatoren usw. neu zu schreiben, dies ist nur ein weiterer Punkt, der viel Frustration verursacht, und da es Auswirkungen auf die Leistung würde ich mir vorstellen, dass andere wie mich, die Benutzer umfangreiche Verwendung von DLL's nur mit MT4 so lange wie möglich bleiben und suchen Sie nach einer anderen Plattform, wo dies nicht ein Problem ist.
Warum, oh warum konnte Metaquotes nicht einfach eine etwas andere Methode für den Aufruf von DLLs auf sichere Weise hinzufügen. Der Entwickler könnte dann wählen, ob er über sicheres Laden oder Performance-Laden lädt und sicherstellen, dass er guten Code schreibt, der Ausnahmen abfängt.
"Es ist besser, seltene Aufrufe zu machen" Ich meine ernsthaft, was für eine Aussage ist das?
Es ist kein Wunder, dass diese Community Schwierigkeiten hat, anständige Artikel zu bekommen. Jeder gute Autor würde sich nicht die Mühe machen, hier zu schreiben. Warum sollten sie auch? Sie machen etwas Anständiges, wie z.B. zeigen, wie man Dlls einbindet und Kommunikation herstellt, und dann kommt jemand daher und haut sie direkt vom Baum.
Soweit ich sehen kann, hat er bei dem Artikel gute Arbeit geleistet, also ist die Leistung vielleicht nicht da, wo sie sein sollte, ABER die Frage oder das Problem hier ist, wenn es so schlecht ist und Sie ein Teil dieser Gemeinschaft sind, warum versuchen Sie nicht, eine Lösung für das zu programmieren, was Sie als offensichtliches Leistungsproblem erkannt haben?
Es ist schön und gut, dass Sie es ansprechen, aber es bringt niemandem etwas, sich darüber zu beschweren, wenn er nicht bereit ist, Lösungen oder sogar Vorschläge zu präsentieren, wie man das Ziel erreichen kann.
Hat der Artikel ein Risiko aufgezeigt, ja, ich glaube, wir haben sogar ein Beispiel dafür bekommen, als eine andere Person sagte: "Hey, ich habe es heruntergeladen und ich habe dieses Problem damit." Das ist genau das Problem, das in dem Artikel diskutiert wurde.Ich denke, wenn ich diesen Artikel erweitern würde, wäre es so, wie du es gesagt hast, PFX, er würde zeigen, wie man sicher interagiert. Allerdings hat er das Risiko aufgezeigt und lässt viel Raum für jemanden wie dich, um es durch das Konzept des Themas SICHERHEIT zu erweitern.
Eine persönliche Anmerkung von mir an den Autor: Versuchen Sie, beim Verfassen von Themen auf Begriffe wie "Neuling" zu verzichten. Das ist beleidigend und erniedrigend und keine professionelle Art, über diejenigen zu sprechen, von denen Sie möchten, dass sie Ihrer Weisheit folgen.
Ich habe versucht, herauszufinden, mit diesem dll Import-Funktionalität, wenn ich in der Lage sein, dlls in anderen Sprachen wie C # geschrieben zu importieren. Ist das möglich? Wenn nicht, warum nicht?
Was ist der Unterschied zwischen einer C++ dll und einer C# dll.
Was ist der Unterschied zwischen einer C++ dll und einer C# dll.
Der Hauptunterschied ist das Design. c# dll-Assembly wird zum Speichern von verwaltetem Code verwendet, und c++ dll enthält nativen Code.
Aber es gibt einen Trick, der den Assembler-Import möglich macht: Inverse P/Invoke.
Was mich betrifft, so bin ich es gewohnt, für diesen Zweck eine c++\cli-Wrapper-dll zu schreiben oder den gesamten verwalteten Code mit c++\cli zu schreiben.
Können Sie mir zeigen, Importieren von Struktur in der C++-Bibliothek?
Ich muss diesen Code zu MQL5DLLSample.cpp hinzufügen:
------------------------
struct MqlTick
{
INT64 Time;
double Bid;
double Ask;
double Last;
UINT64 Volume;
};
_DLLAPI MqlTick __stdcall MyTick(MqlTick &my)
{
my.Bid = 1;
return(my);
}
------------------------
Dann füge ich diesen Code zu MQL5DLL Test.mq5 hinzu (Abschnitt import)
MqlTick MyTick(MqlTick &tick);
und rufe ihn in OnTick() auf
MqlTick tick;
SymbolInfoTick("GBPUSD", tick);
MyTick(tick);
Print("Mein Tick: ",tick.bid);
------------------------
Die Kompilierung der C++-Bibliothek und des EA verläuft ohne Fehler.
Nach dem Aufruf der Funktion MyTick(tick) im Terminal erhalte ich einen Fehler: MQL5DLL_Test (EURUSD,M1) Zugriffsverletzung beim Schreiben auf 0x00000008
Hallo und vielen Dank für diesen nützlichen Artikel.
Ich habe versucht, eine kleine DLL zu erstellen, um Daten zwischen mql5 und mysql auszutauschen.
Also habe ich die verschiedenen Schritte befolgt und hatte einige Fehler.
Die dll ist in c++
Die erste wurde mit minGW kompiliert
Der ex5 konnte sie nicht öffnen, weil es keine 64 Bit kompilierte dll war
Also habe ich mit minGW 64 bits kompiliert
Meine erste dll (die sehr einfach war) funktioniert
Sie macht einige Ergänzungen usw..
Wenn ich versuche, die mysql-Bibliothek zu verwenden, kann ich kompilieren und meine dll ohne Probleme erstellen.
Aber wenn ich versuche, die ex5 zu öffnen, die sie aufruft, bekomme ich die folgende Fehlermeldung:
Cannot open C:\user......\DLLNAME.dll (193)
Haben Sie eine Idee, wie man das beheben kann?
Vielen Dank!
Hallo zusammen,
toller Artikel!
aber ich war nur fragen, kann jemand mir helfen, mit tun, was in diesem Artikel Art von rückwärts beschrieben: immer Daten (Ticks oder Bars Daten) in C++-Programm von metatrader?
Ich habe dieses Arbeiten mit einem standard int-Array, aber ist es möglich, ein CArrayObj / CArrayDouble in Visual Studio C++ übergeben?

- 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.
Neuer Artikel Datenaustausch: Erstellen einer DLL für MQL5 in 10 Minuten :
Autor: MetaQuotes