wie man die DLL entlädt - Seite 6

 
VBAG писал(а) >>

Ist der Prototyp der Hauptfunktion richtig ausgewählt?

Wie verwaltet man die ATTACH/DETACH-Threads?

Wo kann man das nachlesen, am besten mit Beispielen?

Jeffrey Richter "Fenster für Fachleute".

 
VBAG >> :

Grüße an alle!

Das Thema wurde interessant und beschlossen, das diskutierte Thema auf ein einfaches Beispiel, das mit dem Terminal (DLLSample Projekt) kommt zu überprüfen.

Nach dem Kompilieren in VS 6.0 arbeitet die gebackene dll erfolgreich mit dem Terminal, aber entlädt sich nicht!


Woher wissen Sie, dass es sich nicht entlädt? Mein DLLSample funktioniert einwandfrei.

 
HideYourRichess писал(а) >>

Woher wissen Sie, dass es sich nicht entlädt? Mein DLLSample funktioniert einwandfrei.

Indirekt wird der Hauptteil der dll-Datei nicht überschrieben, bis Sie das Terminal schließen.

.

Ich habe ein paar statische Arrays, die auf globaler Ebene deklariert sind, vielleicht wirkt sich das auf sie aus.

.

Ich möchte verstehen, wie man das Projekt richtig abstimmt und "sorgfältig" vorschreibt, wie ich es ausdrücke.

 

Danke, ich werde es mir ansehen.

 
VBAG >> :

Grüße an alle!

Das Thema wurde interessant und beschlossen, das diskutierte Thema auf ein einfaches Beispiel, das mit dem Terminal (DLLSample Projekt) kommt zu überprüfen.

Nach dem Kompilieren in VS 6.0 funktioniert die gebackene dll erfolgreich mit dem Terminal, aber entlädt sich nicht!

Hier ist die Hauptfunktion:

Und nun eine Frage an die Kenner, die wirklich verstehen, wie die dll ist und unter Windows funktioniert und wissen, wie man sie korrekt in einem Projekt unter VS 6.0 (zum Beispiel) kompiliert.

Ist der Prototyp der Hauptfunktion korrekt?

Wie verwaltet man Ströme ATTACH/DETACH?

Wo kann ich darüber lesen, vorzugsweise mit Beispielen?

Was atach? Was für ein dtach? Die Funktion DllMain wird in einer normalen DLL überhaupt nicht benötigt! Der Linker fügt sie an Ihrer Stelle in die DLL ein.

http://msdn.microsoft.com/en-us/library/2kzt1wy3(VS.80).aspx

/MD, /MT, /LD (Laufzeitbibliothek verwenden)


/LD

Erzeugt eine DLL.

Übergibt die Option /DLL an den Linker. Der Linker sucht nach einer DllMain-Funktion, benötigt sie aber nicht. Wenn Sie keine DllMain-Funktion schreiben, fügt der Linker eine DllMain-Funktion ein, die TRUE zurückgibt.

Verknüpft den Startcode der DLL.


http://msdn.microsoft.com/en-us/library/ms682583(VS.85).aspx

DllMain Rückruf-Funktion

Ein optionaler Einstiegspunkt in eine Dynamic-Link-Library (DLL)
 
VBAG >> :

Indirekt wird der Hauptteil der dll-Datei nicht überschrieben, bis Sie das Terminal schließen.

.

Allerdings habe ich ein paar statische Arrays, die auf globaler Ebene deklariert sind, vielleicht wirkt sich das auf sie.


Sie haben also gar keine DLLSample, wie Sie vorhin behauptet haben? richtig.

VBAG >> :

Ich würde gerne verstehen, wie man das Projekt "sorgfältig" abstimmt, um Attach/Detach zu schreiben, wie ich es ausdrücke.

 
HideYourRichess писал(а) >>

Sie haben also gar kein DLLSample, wie Sie vorhin behauptet haben? richtig.

Nun, im Allgemeinen ja, wenn Sie explizit DllMain verwenden. Und im Allgemeinen sollten alle Projekteinstellungen aus dem Sampler übernommen werden. Megakvot empfiehlt, DllMain explizit vorzuschreiben, obwohl, wenn Sie in Delphi schreiben, können Sie DllMain dort nicht vorschreiben und alle Attach/Detach in Initialisierung und Finalisierung setzen.

Außer dass ich zwei statische Arrays auf globaler Ebene hinzugefügt habe, ist das gesamte Projekt von DLLSample übernommen.

Ich rufe die primitive Funktion in dem im Tester laufenden EA auf. Wenn der Test abgeschlossen ist, wird die DLL im Speicher gehalten. Die Situation ist wie folgt.

 
VBAG >> :

Abgesehen davon, dass ich zwei statische Arrays auf globaler Ebene hinzugefügt habe, ist das gesamte Projekt von DLLSample übernommen.

Ich rufe die primitive Funktion in dem im Tester laufenden EA auf. Wenn der Test abgeschlossen ist, wird die DLL im Speicher gehalten. Die Situation ist wie folgt.

Aha, das Problem tritt also im Prüfgerät auf. Es handelt sich weder um ein Skript noch um einen Indikator - es ist der Expert Advisor. Nun, wie verhält sich dieser EA unter normalen Bedingungen, nicht im Testprogramm?


Übrigens sollten "zwei statische Arrays auf globaler Ebene" die DLL theoretisch in keiner Weise beeinträchtigen. Vor allem, wenn Sie keine dll verwenden, um überhaupt auf sie zuzugreifen.


Lustig. In meinem Beitrag fehlt ein Teil des Textes, auf den Sie geantwortet haben, auch wenn ich ihn nicht gelöscht habe. Das Forum ist fehlerhaft.

 
HideYourRichess >> :

Aha, das Problem tritt also im Tester auf. Und es ist weder ein Skript, noch ein Indikator - es ist ein EA. Nun, wie verhält sich dieser EA unter normalen, nicht-testerischen Bedingungen?

Eigentlich hatte ich all diese Probleme mit der Dll auch schon vor einem Jahr, als ich EA-

den Lauf meines Testers mit dem des Systems verglichen.

Aber... jemand hat es geschafft, alle ein paar Mal über krumme Hände und Fehler im Programm zu beschimpfen.

Gott bewahre, dass jemand so ein Chef ist :-(.

P.S.: polinked dll mit Laufzeitbibliotheken VC 2005: nach Indikator und Skript

>> alles wird normal entladen.

 
jartmailru >> :

Eigentlich hatte ich all diese Probleme mit der Dll auch schon vor einem Jahr, als ich EA-

den Lauf meines Testers mit dem des Systems verglichen.

Aber... jemand hat es geschafft, alle ein paar Mal über krumme Hände und Fehler im Programm zu beschimpfen.

Gott bewahre, dass jemand so ein Chef ist :-(.

P.S.: Polinked dll mit VC 2005-Laufzeitbibliotheken: nach Indikator und Skript

alles entlädt sich problemlos.

Noch einmal: Ich habe nirgendwo Probleme mit der DLL. Wenn Sie ein Problem haben, ist es Ihr Programmierproblem, es ist wahrscheinlich nicht die Schuld von MS oder MT. Und die Tatsache, dass Sie "altes" VC verwenden müssen - das sollte klar sein.