wie man die DLL entlädt - Seite 7

 

AlexEro,

Ich bin aus dem Urlaub zurück, wie ich sehe, hast du die Bastarde am Hals. Lasst sie uns gemeinsam töten. )))))

HIdeYourRichess,

Das Problem mit dem Laden der DLL nach dem Löschen des Indikators besteht tatsächlich, aber es liegt nicht am Vorhandensein oder Nichtvorhandensein von Fehlern im Code der DLL selbst, sondern daran, dass die Entwickler die Verwendung externer Bibliotheken durch so genannte "vernünftige Grenzen" eingeschränkt haben.

Was diese Grenzen sind - weiß der Teufel, sie haben sich nicht die Mühe gemacht, im Detail zu erklären. Solange die Bibliothek jedoch innerhalb dieser Grenzen liegt, sind Up- und Downloads problemlos möglich.

Aber sobald ein gestörter Programmierer anfängt, übermäßig eifrig Speicher zu manipulieren oder dem Terminal Prozessorzeit für seine Berechnungen zu stehlen oder die heilige (oh je) - terminal.exe-Nachrichtenwarteschlange anzufassen, wird das böse Methaquot seine Rache nehmen.

Dass Dll nicht entladen wird, ist nichts Neues. Ich bin schon auf solche Dinge gestoßen, die mir die Haare zu Berge stehen lassen. Zum Beispiel begannen einige Indikatoren (die wohlgemerkt keine DLL-Aufrufe enthielten), in den Adressraum des jeweils anderen zu klettern. Und selbst nach einem Aufruf einer einfachen Funktion aus der DLL (auch wenn sie gar nichts tut - ich habe es extra ausprobiert!) überspringt das Terminal plötzlich(!) MQL-Programmzeilen. Die Schleife über die Zeitreihe for(i=limit;i>=0;i--) flog nach ihrer Beendigung in den Bereich negativer Indizes (was unweigerlich durch Alerts bestätigt wurde)!!! Das Erstaunlichste war, dass terminal.exe, nachdem es nach einer bestimmten Anzahl von Millisekunden die Komik der Situation erkannt und sich sofort in die Hose gemacht hatte, sofort aufhörte zu spielen und die Variable i wieder auf ihren ursprünglichen Wert von 0 zurücksetzte, als wäre nichts geschehen.

Lassen Sie uns besprechen, was das Dienstprogramm regsvr tut, nachdem wir die Fehler bei der Handhabung des Codes von Ex4-Programmen behoben haben.

 
HideYourRichess >> :

Noch einmal: Ich habe kein Problem mit dll, egal wo. Wenn Sie Probleme haben, liegt das an Ihrer Programmierung, und weder MS noch MT werden daran schuld sein. Und die Tatsache, dass Sie "altes" VC verwenden müssen - das sollte ohnehin klar sein.

Lustiger Mann.

Alles wird durch Tests gelöst.

.

Nehmen Sie also die DLL, ziehen Sie sie aus dem EA heraus - wenn sie entfernt werden kann

mit MT running, das ist es, du bist ein Held, herzlichen Glückwunsch!

Und wenn es nicht klappt, warum schreiben Sie das hier? Für wen?

Damit die Kunden sehen, wie sie bei der Arbeit mit Ihren Produkten behandelt werden?

Oder damit jeder genau weiß, wen er nicht um Rat fragen sollte?

.

Jetzt frage ich mich, was für eine Antwort die Leute, die die Frage gestellt haben, wohl wollen?

höchstwahrscheinlich so: Erstellen Sie eine Exe, laden Sie eine Dll mit dynamischer Verknüpfung in sie

über GetProcAddress() und ziehen Sie die Aufrufe.

Wenn die Exe beim Ausführen die Dll nach dem Entladen nicht entfernt, haben Sie ein Problem.

Das nennt man, ein wirklich objektives Ergebnis zu erhalten, anstatt sich etwas auszudenken

einige "Fehler" in "Ihrer Programmierung".

Und zu diesem Ergebnis kann man eine Theorie aufstellen :-)...

.

Die Theorien, die ich bereue, sind hier alle erfunden worden.

Aber das liegt daran, dass Sie zu faul sind, die % zu heben, um richtig zu antworten.

.

Und die ÖVAG... nun ja... Bravo!

Eine vernünftige Problembeschreibung, ein konkreter Fall, alles wurde klar und deutlich.

Wenn Sie allerdings mit einem Anwendungsserver arbeiten, wird der Ersatz der dll bald nicht mehr so relevant sein :-).

.

Ehrlich gesagt, ist es für die Fehlersuche besser, *statische* Daten in einer Datei zu haben.

Lassen Sie einen EA die Daten für Sie in eine Datei schreiben.

Seit 7 Jahren lese und schreibe ich Multimegabyte-Dateien in einer Zeile - alles ist sehr schnell.

Und bei einer tabulatorgetrennten Datei können Sie diese große Zeichenkette in einem Zug und ohne substr() in eine Matrix umwandeln

(in Zehntelsekunden), denn die Aufteilung in Strings und dann in Spalten funktioniert irgendwie auch

zu langsam (es waren ein paar Sekunden). Wenn also etwas abstürzt, kann das Problem *garantiert* werden.

reproduzieren, anstatt sich auf Zufallszahlengeneratoren zu verlassen.

.

Und mit diesem Ansatz (!) würde das Testen vereinfacht werden. Weil es keine Dll ist.

Denn die Ausführen-Schaltfläche in ONE CLICK kompiliert, schleicht, führt aus, und die Exe selbst übernimmt die notwendigen Daten.

.

P.S.: gerade die Probleme mit der "Programmierung" können gelöst werden...

 

Ich stimme meinen Vorrednern zu, dass meine DLL in MT4 mit Vorsicht und Einschränkung verwendet werden sollte. Das bedeutet, dass Sie Ihre DLL nach und nach entwickeln sollten, und keine Exoten. Ihre DLL ist ein temporärer Gast im Haus eines anderen Semi-Interpreters in MQL4.

2 alsu: Ich bin krank, ich habe einfach nichts zu tun, ich kann kein intelligentes Projekt im Bett durchführen, aber ein Gespräch mit Nerds erfordert nicht viel geistige Anstrengung, also habe ich es aufgeschrieben. Ich warte darauf, dass ihr Gewissen aufwacht, aber es ist noch nicht sichtbar, nur Demagogie und Geschwätz ....

 
alsu >> :

Das Problem mit dem Entladen von DLLs nach dem Entfernen des Indikators existiert wirklich, aber es hängt nicht mit dem Vorhandensein oder Nichtvorhandensein von Fehlern im DLL-Code selbst zusammen, sondern mit der Tatsache, dass die Entwickler die Verwendung von externen Bibliotheken durch so genannte "vernünftige Grenzen" eingeschränkt haben.

alsu >> :

Was diese Grenzen sind - weiß der Teufel, sie machen sich nicht die Mühe, im Detail zu erklären. Dennoch, solange die Bibliothek innerhalb dieser Grenzen passt, Uploads und Downloads gehen gut.

Aber sobald ein gestörter Programmierer anfängt, übermäßig eifrig Speicher zu manipulieren oder dem Terminal Prozessorzeit für seine Berechnungen zu stehlen oder die heilige (oh je) - terminal.exe-Nachrichtenwarteschlange anzufassen, wird das böse Methaquot seine Rache nehmen.

Dass Dll nicht entladen wird, ist nichts Neues. Ich bin schon auf solche Dinge gestoßen, die mir die Haare zu Berge stehen lassen. Zum Beispiel begannen einige Indikatoren (die wohlgemerkt keine DLL-Aufrufe enthielten), in den Adressraum des jeweils anderen zu klettern. Und selbst nach dem Aufruf einer einfachen Funktion aus einer DLL (auch wenn sie gar nichts tut - ich habe es extra ausprobiert!) überspringt das Terminal plötzlich(!) MQL-Programmzeilen. Die for(i=limit;i>=0;i--) Zeitserienschleife würde nach Beendigung in den Bereich negativer Indizes geraten (was zwangsläufig durch Warnmeldungen bestätigt wurde)!!! Was mich am meisten erstaunte, war, dass terminal.exe, nachdem es nach einer bestimmten Anzahl von Millisekunden die ganze Komik der Situation erkannt und sich sofort in die Hose gemacht hatte, sofort aufhörte zu klappern und i wieder auf seinen ursprünglichen Wert von 0 zurücksetzte. Als ob nichts passiert wäre.

Lassen Sie uns besprechen, was das Dienstprogramm regsvr tut, nachdem wir Fehler bei der Verarbeitung von eX4-Code behoben haben.

Wie man sagt, kann man sich den Schwanz brechen, wenn man dumm ist. Mit anderen Worten: Wenn Sie keine normalen, funktionierenden Programme in MQL schreiben können, ist das Ihr Problem, nicht das von MQL, das ist alles. Man kann eine fehlerhafte DLL in C schreiben, aber das ändert nichts an der Tatsache, dass C eine großartige Sprache ist. Und auch hier steht ein schlechter Tänzer, nämlich Sie, den Bollen im Weg. Ich verstehe Ihren Wunsch, MT oder MS für Ihre Fehler verantwortlich zu machen. Wenn es mit dem Alter nicht verschwindet, können Sie nichts dagegen tun.

 
HideYourRichess >> :

Hier kann man sich, wie man sagt, dummerweise den Schwanz brechen. Mit anderen Worten: Wenn Sie keine anständigen, funktionierenden Programme in MQL schreiben können, ist das Ihr Problem, nicht das von MQL, das ist alles. Man kann eine fehlerhafte DLL in C schreiben, aber das ändert nichts an der Tatsache, dass C eine großartige Sprache ist. Und auch hier steht ein schlechter Tänzer, nämlich Sie, den Bollen im Weg. Ich verstehe Ihren Wunsch, MT oder MS für Ihre Fehler verantwortlich zu machen. Wenn es mit dem Alter nicht weggeht - dann hilft Ihnen nichts mehr.

Ihrem Avatar nach zu urteilen, gibt es in Ihrem Alter nichts kaputt zu machen und nichts zu stören.

Haben Sie meine DLLs gesehen? Warum in aller Welt sollten Sie sie als Schimpfwörter bezeichnen? Ich habe nie Pannen geschrieben - ich habe keine Zeit dafür. Der Fehler wurde in diesem Fall mit Meta-Zitaten geschrieben (ich erhebe übrigens keinen Anspruch auf MS). Wenn Sie nie etwas Komplexeres als 2 +2 in eine DLL eingeben, heißt das nicht, dass andere das nicht tun. 2 +2 wird nicht stören.

 
jartmailru >> :

Lustiger Mann.

Alles wird durch Tests gelöst.


Ich habe es getestet - bei mir funktioniert es einwandfrei.


jartmailru >> :

Nehmen Sie also die DLL, ziehen Sie sie aus dem EA heraus - wenn sie entfernt werden kann

mit MT running, das ist es, du bist ein Held, herzlichen Glückwunsch!

Und wenn es nicht klappt, warum schreiben Sie das hier? Für wen?

Damit die Kunden sehen können, wie sie bei der Arbeit mit Ihren Produkten behandelt werden?

Oder damit jeder genau weiß, bei wem er keinen Rat einholen sollte?


Was meinen Sie mit "kann entfernt werden"? Meine Dlls im EA verhalten sich anständig. Ich muss etwas völlig falsch machen.

 
HideYourRichess >> :

>> das ist Ihr Problem, nicht das von MQL.

Wenn der Interpreter nicht fehlerhaft ist, überspringt er keine Befehle im Code, auch wenn Sie sich hier in die Hose machen!

 
HideYourRichess >> :

Was meinen Sie mit "kann entfernt werden"? Meine Dlls im EA verhalten sich anständig. Ich muss etwas völlig falsch machen.

Was ich meine, ist, dass Sie eine bestimmte DLL im EA angeben müssen.

Dann müssen Sie den Expert Advisor ausführen und dürfen den Metatrader nicht beenden.

Der wichtigste Anwendungsfall ist, dass wir so tun, als ob wir die DLL durch eine neue ersetzen würden.

Wenn es fehlschlägt, wenn der Metatrader läuft (und ich prüfe das, indem ich die Datei lösche), dann

dann denkt das System, die DLL sei in Gebrauch.

voila. Ihr Expert Advisor ist fertig und die DLL wurde nicht entfernt.

Nun müssen Sie die gesamte Anwendung neu starten, um die Dll zu ersetzen.

 
AlexEro >> :

Ich bin krank.

H1N1;)

>> sie sagten, sie hätten die Vorwahl bekommen.

 
alsu >> :

Ihrem Avatar nach zu urteilen, gibt es in Ihrem Alter nichts kaputt zu machen und nichts zu stören.

Haben Sie meine DLLs gesehen? Warum in aller Welt sollten Sie sie als Schimpfwörter bezeichnen? Ich habe nie Pannen geschrieben - ich habe keine Zeit dafür. Der Fehler wurde in diesem Fall mit Meta-Zitaten geschrieben (ich erhebe übrigens keinen Anspruch auf MS). Wenn Sie nie etwas Komplexeres als 2 +2 in eine DLL eingeben, heißt das nicht, dass andere das nicht tun. 2 +2 wird nicht stören.


Oooooh, muyuye hat sich dazu herabgelassen, sich über den Avatar lustig zu machen. Der nächste Schritt ist der Versuch, sich über den Spitznamen lustig zu machen.


Wovon haben Sie in Ihrer letzten Rede gesprochen, von welchen Schrecken haben Sie dem staunenden Publikum erzählt? Wenn ich mir das ansehe, bin ich wirklich perplex. Dafür muss man schon sehr hart arbeiten. Daher auch die bösen Worte über Ihre DLLs. Aber wenn diese Schrecken, die Sie beschrieben haben, nichts mit DLLs zu tun haben, warum erzählen Sie dann davon?


Übrigens, was bedeutet 2+2? Ist das ein Maß für die Schwierigkeit? Versuchen Sie, so etwas wie 2+2 selbst zu implementieren, wie in Excel, und Sie werden überrascht sein, wie schwierig das ist.