BOOL Apientry DllMain
Ergebnis 1 bis 10 von 10

Thema: BOOL Apientry DllMain

  1. #1
    Hallo;

    Nur eine kleine Frage: Ich habe mir eine gute Anzahl von MT4-DLL-Quelldateien angesehen und festgestellt, dass einige von ihnen verwenden: BOOL APIENTRY DllMain, während andere nicht.

    (z. B. offizielle MT4-ExpertenSamplesDLLSample

    PHP-Code: <code> <span style = ”color: # 000000”> <span style = ”color: # 0000BB”> </span> <span style = ”color: # FF8000”>/ ---- -------------------------------------------------- ------------
    /||
    / ---------------------- ----------------------------------------
    <span> <span style = ”color: # 0000BB”> BOOLAPIENTRYDllMain </span> <span style = ”color: # 007700”> (</span> <span style = ”color: # 0000BB”> HANDLEhModule </span.) > <span style = ”color: # 007700”>, </span> <span style = ”color: # 0000BB”> DWORDul_reason_for_call </span> <span style = ”color: # 007700”>, </span> < span style = ”color: # 0000BB”> LPVOIDlpReserved </span> <span style = ”color: # 007700”>)
    {
    </span> <span style = ”color: # FF8000” >/----
    </span> <span style = ”color: # 007700”> Schalter (</span> <span style = ”color: # 0000BB”) ul_reason_for_call </span> <span style = ”color: # 007700”>)
    {
    case </span> <span style = ”color: # 0000BB”> DLL_PROCESS_ATTACH </span> <span style = ”color: # 00 7700 ”>:
    case </span> <span style =” color: # 0000BB ”> DLL_THREAD_ATTACH </span> <span style =” color: # 007700 ”>:
    case </span> <span style = ”color: # 0000BB”> DLL_THREAD_DETACH </span> <span style = ”color: # 007700”>:
    case </span> <span style = ”color: # 0000BB”> DLL_PROCESS_DETACH <span> <span style = ”color: # 007700”>:
    break;
    }
    </span> <span style = ”color: # FF8000”>/--- -
    </span> <span style = ”color: # 007700”> return (</span> <span style = ”color: # 0000BB”> TRUE </span> <span style = ”color: # 007700 ”>);
    }
    </span> <span style =” color: # 0000BB ”> </span> </span> </code> Meine Frage: Gibt es eine Faustregel? dass beispielsweise das MTF-Muster als Standard enthalten sein sollte?

  2. #2
    Vielen Dank 7bit. Sehr nett von dir.

  3. #3
    Die APIENTRY-Funktion (falls vorhanden) wird von Fenstern aufgerufen, wenn eine DLL geladenentladen wird, und kann verwendet werden, um Speicher freizugebenfreizugeben und Setup-Routinen auszuführen. Da ein Kontext bereitgestellt wird, kann geeigneter Code implementiert werden. Dies kann nützlich sein, um interne DLL-Ressourcen zu verwalten, wenn eine DLL von einem Anwendungs-EG häufig von mehreren Inhabern undoder mehreren EAs verwendet wird. Lesen Sie hier für weitere Informationen
    http://support.microsoft.com/kb/815065

  4. #4
    Dank Reichweite gebunden. Aber würden Sie sagen, dass es in den meisten Fällen ratsam ist, so etwas wie das MT4-Beispiel zu verwenden. Oder lassen Sie es einfach weg, wie es eine Reihe anderer mt4-DLLs tun.

  5. #5
    Sie brauchen es nur, wenn Sie in das LadenEntladen usw. einhängen müssen. Andernfalls müssen Sie nur true zurückgeben (was Erfolg bedeutet). Dieselbe leere Standardfunktion (die nur Erfolg liefert und nichts anderes macht) sollte automatisch von installiert werden der CompilerLinker, wenn Sie es nicht selbst deklarieren.

  6. #6
    Hallo 7bit, eine kleine Frage: Ist die BOOL Apientry DllMain etwas ähnlich wie du es in deiner Pascal-Dll getan hast. mit PHP-Code: <code> <span style = ”color: # 000000”> <span style = ”color: # 0000BB”> Initialisierung
    PyStatus </span> <span style = ”color: # 007700”> : = </span> <span style = ”color: # 0000BB”> 0 </span> <span style = ”color: # 007700”>;
    </span> <span style = ”color: # 0000BB ”> LoadPyDll </span> <span style =” color: # 007700 ”> ();
    </span> <span style =” color: # 0000BB ”> Finalisierung
    UnloadPyDll </span > <span style = ”color: # 007700”> ();
    </span> <span style = ”color: # 0000BB”> end </span> <span style = ”color: # 007700”> .
    </span> <span style = ”color: # 0000BB”> </span> </span> </code> würde in die BOOL Apientry DllMain gehen, wenn Sie sie in C schreiben würden, wenn dies der Fall wäre Das sieht so aus: PHP Code: <code> <span style = ”color: # 000000”> <span style = ”color: # 0000BB”> </span> <span style = ”color: # FF8000”>/ -------------------------------------------------- ----------------
    /||
    / ------------------ -------------------------------------------- < br> </span> <span style = ”color: # 0000BB”> BOOLAPIENTRYDllMain </span> <span style = ”color: # 007700”> (</span> <span style = ”color: # 0000BB”> HANDLEhModule </span> <span style = ”color: # 007700”>, </span> <span style = ”color: # 0000BB”> DWORDul_reason_for_call </span> <span style = ”color: # 007700”>, <span> <span style = ”color: # 0000BB”> LPVOIDlpReserved </span> <span style = ”color: # 007700”>)
    {
    </span> <span style = ”color : # FF8000 ”>/----
    </span> <span style =” color: # 007700 ”> wechseln (</span> <span style =”) color: # 0000BB ”> ul_reason_for_call </span> <span style =” color: # 007700 ”>)
    {
    Fall </span> <span style =” color: # 0000BB ”> DLL_PROCESS_ATTACH <span> <span style = ”color: # 007700”>:
    </span> <span style = ”color: # 0000BB”> PyStatus </span> <span style = ”color: # 007700”> = </span> <span style = ”color: # 0000BB”> 0 </span> <span style = ”color: # 007700”>;
    </span> <span style = ”color: # 0000BB ”> LoadPyDll </span> <span style =” color: # 007700 ”> ();

    case </span> <span style =” color: # 0000BB ”> DLL_THREAD_ATTACH </span> <span style = ”color: # 007700”>:
    case </span> <span style = ”color: # 0000BB”> DLL_THREAD_DETACH </span> <span style = ”color: # 007700”>: < br> case </span> <span style = ”color: # 0000BB”> DLL_PROCESS_DETACH </span> <span style = ”color: # 007700”>:
    </span> <span style = ”color : # 0000BB ”> UnloadPyDll </span> <span style =” color: # 007700 ”> ();

    break;
    }
    </span> <span style = ”Color: # FF8000”>/----
    </span> <span style = ”Color: # 007700”> return (</span> <span style = ”color: # 0000BB”> TRUE </span> <span style = ”color: # 007700”>);
    }
    </span> <span style = ”color: # 0000BB”> </span> </span> </code> oder würde man das mit DLL_THREAD_ATTACH, DLL_THREAD_DETACH, tun

  7. #7

    Zitat Zitat von ;
    Hallo 7bit, eine kleine Frage: Ist die BOOL Apientry DllMain etwas ähnlich wie du es in deiner Pascal-Dll getan hast. mit PHP-Code: <code> <span style = ”color: # 000000”> <span style = ”color: # 0000BB”> Initialisierung
    PyStatus </span> <span style = ”color: # 007700”> : = </span> <span style = ”color: # 0000BB”> 0 </span> <span style = ”color: # 007700”>;
    </span> <span style = ”color: # 0000BB ”> LoadPyDll </span> <span style =” color: # 007700 ”> ();
    </span> <span style =” color: # 0000BB ”> Finalisierung
    UnloadPyDll </span > <span style = ”color: # 007700”> ();
    </span> <span style = ”color: # 0000BB”> end </span> <span style = ”color: # 007700”> .
    </span> <span style = ”color: # 0000BB”> </span> </span> </code> würde in das BOOL Apientry DllMain gehen, wenn Sie es in C schreiben würden, wenn dies so wäre das sieht so aus: [php]/ ------------------------------------ -------------------------- /| |/ ------------------------------------------- ------------------- BOOL ...
    Das Laden von DLLs in DllMain ist eine sehr schlechte Idee: http://msdn.microsoft.com/en-us/library/ms682583(v=VS.85).aspx

  8. #8
    [quote = M_j; 4969179] hi, eine kleine Frage: Ist die BOOL Apientry DllMain ein bisschen ähnlich wie du es in Pascal dll getan hast? mit PHP-Code: <code> <span style = ”color: # 000000”> <span style = ”color: # 0000BB”> Initialisierung
    PyStatus </span> <span style = ”color: # 007700”> : = </span> <span style = ”color: # 0000BB”> 0 </span> <span style = ”color: # 007700”>;
    </span> <span style = ”color: # 0000BB ”> LoadPyDll </span> <span style =” color: # 007700 ”> ();
    </span> <span style =” color: # 0000BB ”> Finalisierung
    UnloadPyDll </span > <span style = ”color: # 007700”> ();
    </span> <span style = ”color: # 0000BB”> end </span> <span style = ”color: # 007700”> .
    </span> <span style = ”color: # 0000BB”> </span> </span> </code> Ja, es wird innerhalb dieser Funktion aufgerufen. Die kompilierte Binärdatei enthält immer automatisch Code aus der Laufzeitbibliothek, der immer benötigt wird, und ein Teil dieses Codes ist eine (ziemlich konforme und flexible) DllMain-Funktion, die viele Dinge automatisch erledigt (Heap-Verwaltung initialisierendeinitialisieren, Ausnahmebehandlung, Thread) lokaler Speicher usw.) Dinge, die Sie manuell in C erledigen müssten. Es gibt ein paar Stellen, an denen Sie sich auf standardisierte Pascal-artige Weise in all das einhaken können. Eine dieser Stellen (es gibt einige mehr) ist die Initialisierung und Finalisierungsabschnitte. Sie werden von innerhalb der DllMain () aufgerufen. Hier in Zeile 27 ist die RTL-Funktion, die den Großteil des Aufrufs von DllMain () handhabt (er wird nicht direkt als DllMain () bezeichnet, es ist immer noch etwas mehr Compiler-Magie um ihn gewickelt).
    http://svn.freepascal.org/cgi-bin/vi...nc?view=markupInitialisierungs- und Finalisierungsabschnitte werden von irgendwo innerhalb der PascalMain- und FPC_Do_Exit-Prozeduren aufgerufen, die dort aufgerufen werden. Wie Sie sehen, gibt es noch ein paar weitere Möglichkeiten, sich zuzuordnen, indem Sie bestimmte Prozedurvariablen zuweisen, die dort aufgerufen werden. Dies ist alles wirklich Hardcore-Zeug in der Laufzeitbibliothek, das nur von denjenigen verstanden werden soll, die auf den Compiler und die RTL selbst hacken. Wenn Sie diese Quellen herunterladen und versuchen, all diesen Aufrufen zu folgen, um zu sehen, was los ist (oder mit dem Debugger durchgehen), werden Sie feststellen, dass dies tatsächlich sehr eingehalten wird und viele Dinge unter der Haube passieren, um die identische Pascal-Programme (oder -Bibliotheken) kompilieren und laufen so problemlos auf einer so breiten Palette von Architekturen und Betriebssystemen. Normale Benutzer (Programmierer) verwenden einfach die Initialisierungs- und Finalisierungsabschnitte (wenn sie sie brauchen oder weglassen) (und möglicherweise einige der anderen Hook-Funktionen, wie sie dokumentiert sind), und machen sich keine Sorgen darüber, und alles sollte funktionieren. Aber es ist immer noch interessant, sich diesen Code anzuschauen und ihn zumindest zu verstehen (ich habe bisher nur Teile davon verstanden, bin aber nicht einer der Compiler-Hacker, daher muss ich nicht alles wissen).

  9. #9

    Zitat Zitat von ;
    Das Laden von DLLs in DllMain ist eine sehr schlechte Idee:
    http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx
    weil dies Abhängigkeitsschleifen in der DLL-Ladereihenfolge erzeugen kann. In diesem einfachen Fall (meine Python-Bindung) kann dieses Problem nicht auftreten. Es ist jedoch wahr, dass Vorsicht geboten ist und nur einfache und in sich geschlossene Dinge in DllMain () ausgeführt werden, da letztendlich das Betriebssystem diese Funktion aufruft und es nicht leicht ist, sich auf die genaue Reihenfolge zu verlassen, in der sie aufgerufen werden In komplexen Situationen oder zu welchen Zeiten werden sie genau aufgerufen.

  10. #10
    Danke sehr hilfreiche Infos.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
Die tradingintuitive Webseite verwendet Cookies
Wir nutzen Cookies, um Ihnen das Webseitenerlebnis bestmöglich anbieten zu können. Durch weitere Nutzung der Webseite erlauben Sie die Nutzung von Cookies. Für weitere Details und wie Sie ggf. diese Einstellungen verändern können, lesen Sie bitte unsere Datenschutzbestimmung. Lesen Sie mehr