wie man die DLL entlädt - Seite 8

 
alsu >> :

Wenn der Interpreter nicht fehlerhaft ist, überspringt er keine Befehle im Code, egal wie viel Mist man macht!

Verwenden Sie nicht solche Superlative, "glitchy". Wenn ein Interpreter ein paar Pannen hat, heißt das nicht, dass er fehlerhaft ist. Werfen Sie zumindest einen Blick auf denselben VC-Fehlerbericht, ich empfehle ihn sehr, um zu verstehen, was "glitchy" ist. Die Situation ist um eine Größenordnung schlimmer, aber niemand, der bei Verstand ist, würde es wagen, VC als "fehlerhaft" zu bezeichnen. Das ist auch hier so.


Und überhaupt, war die fragliche Dll hier? Gibt es irgendeinen Einwand, dass eine korrekt geschriebene DLL sich korrekt verhält? und der einzige korrekte Weg, die DLL zu entladen, ist der in der Dokumentation empfohlene Standardweg?

 
alsu >> :

AlexEro,

Zyklus auf Zeitreihe for(i=limit;i>=0;i--) nach Beendigung flog er in den Bereich negativer Indizes (was unweigerlich durch Warnungen bestätigt wurde)!!!!


int start()
  {
   for(int i=11; i>=0; i--) continue;
   Alert( i);
   return(0);
  }

))) Haben Sie es ernst gemeint?

Was für eine Sauerei! Das habe ich nicht gewusst!!!

(Was für ein... schlampiger Tag heute)

 
jartmailru >> :

Es bedeutet, eine bestimmte DLL im EA anzugeben.

Führen Sie dann den EA aus und beenden Sie Metatrader nicht.

Als nächstes - und das ist der wichtigste Anwendungsfall - müssen wir so tun, als würden wir die DLL durch eine neue ersetzen.

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. Der Expert Advisor hat seine Arbeit abgeschlossen und die DLL wurde nicht entladen.

Jetzt muss ich die gesamte Anwendung neu starten, um die DLL zu ersetzen.

Oje, wenn ich Ihre Beschreibung richtig verstanden habe, dann schlagen Sie vor, die dll selbst zu ersetzen, wenn der EA ausgeführt wird, an den die dll angehängt ist?! Haben Sie versucht, den EA zu stoppen (nicht mit einer Schaltfläche), dann ersetzen Sie die dll, und starten Sie den EA neu?

 
alsu писал(а) >>

Aber sobald ein verängstigter Programmierer anfängt, übermäßig eifrig den Speicher zu manipulieren oder dem Terminal Prozessorzeit für seine Berechnungen zu stehlen, oder die heilige (oh mein Gott) - terminal.exe Nachrichtenwarteschlange berührt, dann wird das böse Methaquot seine Rache nehmen.

Und Sie sind der Meinung, dass die Message-Queue-Handler des Programms "wie Merlin, der Große und Schreckliche" in allen Codefragmenten, die ausgeführt werden, sein sollten? Warum sollten Sie die Nachrichtenwarteschlange eines anderen Benutzers mit einer DLL überhaupt berühren?

Ich habe solche Dinge erlebt, die einem die Haare zu Berge stehen lassen.

Bis jetzt sind es nur Worte. Geben Sie mir ein Beispiel für einen Code. Ich bin nicht der einzige, der sich dafür interessiert.

Im Allgemeinen bin ich nicht auf dll gestoßen, die nicht als solche geladen wird (ich habe bereits darüber geschrieben; ich habe dll sowohl in Expert Advisors als auch in Indikatoren verwendet; in allen Fällen musste ich "übermäßig eifrig Speicher manipulieren oder CPU-Zeit" direkt in dll verwenden, und das Ergebnis war unerwünschter Betrieb).

 
Svinozavr >> :

))) Ist es das, was Sie meinen?

Was für eine Sauerei! Das habe ich nicht gewusst!!!

(Was für ein... verkorkster Tag ist das heute).

Ich kann den Code nicht genau reproduzieren, aber er sah in etwa so aus

int start()
{

...

int i;
for ( i=100; i>=1; i--) //отмечу, что здесь было именно 1, а не 0
{
   //че-то делаем
   CallToDLLFunction();//здесь вызывалась какая-то простенькая функция, время работы порядка 1-3 миллисекунд
}

if( i<0) return(0); //эти две строчки вставил уже когда заподозрил неладное
Alert("i=", i);

return(0);
}

In einem schnellen Markt, in dem mehrere Ticks pro Sekunde empfangen werden, erzeugt dieser Code in den Warnmeldungen eine Folge von i=0, i=-1, i=-2, i=-3 (je nachdem, wie viele Ticks das Terminal bis zur Ausführung von start() verpasst hat) und dann wieder i=0.

Verpasste Zecken - was soll's, das kommt vor. Aber wenn es passiert, bedeutet das nicht, dass das Programm einen bedingten Befehl springen muss, der im Code eigentlich zweimal vorkommt (die for-Schleife ist im Grunde auch ein Verzweigungsbefehl).

 
HideYourRichess >> :

Heiliger Strohsack, wenn ich richtig von Ihrer Beschreibung verstehe, schlagen Sie vor, die Dll selbst zu ersetzen, wenn der EA ausgeführt wird, an die die Dll angehängt ist?! Haben Sie versucht, den EA zu stoppen (nicht mit einer Schaltfläche), dann ersetzen Sie die dll, und starten Sie den EA neu?

Natürlich geht es darum, die DLL zu ersetzen, nachdem die Tests abgeschlossen sind.

Aber anscheinend legt Ihre berufliche Erfahrung nahe, dass Sie nach den Fehlern, die Sie gemacht haben

und unkorrektem Verhalten gegenüber Forumsteilnehmern ist es gewinnbringender, auf Worten herumzuhacken.

.

Und natürlich hat der große Profi nicht versucht, einen einfachen Test durchzuführen ... oder hat es getan.

 
derselbe Effekt, aber auf einer größeren Skala (bis zu -100 und darüber hinaus), der beim Starten des Terminals und beim Laden des Indikators aus der Vorlage beobachtet wird, wenn der Term das Ende der fehlenden Historie lädt
 
jartmailru >> :

Natürlich geht es darum, die DLL zu ersetzen, nachdem die Tests abgeschlossen sind. Aber anscheinend ist es aus Ihrer beruflichen Erfahrung heraus lohnender, nach den Fehlern, die Sie begangen haben, und Ihrer unkorrekten Haltung gegenüber den Forumsmitgliedern auf den Worten herumzuhacken.

Nein, unsere Erfahrung sagt, dass man vorsichtig sein muss, um herauszufinden, worüber man spricht. Und wenn ein "Forumsmitglied" ein Narr ist - das ist in Ordnung, das kommt vor, man sollte nicht einmal laut darüber sprechen. Aber wenn er in seiner Unwissenheit ein sturer Narr ist - das stimmt, dann gibt es keine Wahl der Worte. Und ich brauche nicht zu lügen, ich habe keine Fehler gemacht. Im Gegensatz zu Ihnen.


Nun, Dll in meinem Expert Advisor verhält sich korrekt. Dies ist das fünfte Mal, dass ich es Ihnen sage, und das letzte Mal. Vielleicht habe ich eine andere dll, so eine graue, absolut uninteressante dll, nicht wie Ihre.

 
alsu >> :

Ich kann den Code nicht genau reproduzieren, aber er sah in etwa so aus

In einem schnellen Markt, in dem mehrere Ticks pro Sekunde empfangen werden, erzeugt dieser Code in den Warnmeldungen eine Folge von i=0,i=-1,i=-2,i=-3 (je nachdem, wie viele Ticks das Terminal verpasst hat, bis start() ausgeführt wurde) und dann wieder i=0.

Verpasste Zecken - was soll's, das kommt vor. Aber wenn das passiert, bedeutet das nicht, dass das Programm einen bedingten Befehl springen muss, der im Code sogar zweimal vorkommt (die for-Schleife ist auch ein Verzweigungsbefehl).

Die Klärung der Schleifenbedingung i>=1 statt 0, wie Sie in meinem verwirrten ersten Beitrag zitiert haben, beseitigt den Verdacht - ich dachte schon, Sie wären zu weit gegangen... auch krank.

Bedingungen für das Springen? Cool. Das ist nie geschehen. Was ist diese magische DLL? )))

Können Sie das Ergebnis reproduzieren? Und sehen Sie sich die DLL selbst an. Nicht, dass ich das nicht glauben würde - ich möchte nur wirklich lernen, wie man solche DLLs schreibt. Damit sich alles einfügt. Ich werde später etwas haben, worüber ich mit klugen Leuten sprechen kann...

 
HideYourRichess >> :

Also, in meinem EA verhält sich die Dll korrekt. Ich melde mich zum fünften Mal und zum letzten Mal. Ich muss eine andere dll haben, so eine graue absolut uninteressante dll, nicht wie deine.

Großartig, Sie haben bereits eine neue Ebene erreicht - eine Ebene der Abstraktion.

Wahrscheinlich haben Sie Erfahrung im Umgang mit Menschen, vielleicht im Handel.

.

Nun, lassen Sie uns diese Art von Argumentation anwenden. Ich bin sehr froh, dass Sie meine Argumente akzeptiert haben.

Ich für meinen Teil muss nur allen versichern, dass meine Dlls noch besser funktionieren.

In jedem Fall waren die Ergebnisse die gleichen wie die des Metatrader-Testers und der Dll von Neuroshell.

.

Aber als jemand, der nicht in der Lage ist, einen einfachen Test durchzuführen und darüber zu berichten, sollten Sie mir nicht noch einmal antworten.

>> Außer für die Öffentlichkeit.