DllMain in Programm einbinden ohne weitere Bibliotheks-Funktion



  • REXPILS schrieb:

    Das "EigeneSteuerelement" soll in dieser DllMain registriert usw. werden.

    Mal davon abgesehen, dass ich im Moment nicht ganz sicher weiß, ob man das überhaupt in DllMain machen darf (wahrscheinlich aber schon), schreibe doch lieber RegisterEigeneSteuerelement und vielleicht auch UnregisterEigeneSteuerelement . Exportiere sie und rufe sie dann in der EXE auf. So einfach könnte das sein.

    Warum muss das bei dir so kompliziert sein?



  • Swordfish schrieb:

    REXPILS schrieb:

    Das "EigeneSteuerelement" soll in dieser DllMain registriert usw. werden.

    Was heißt "registriert werden" und wozu?

    Meine Güte, wie merkbefreit bist Du denn? Er meint natürlich RegisterClass/Ex. Das funktioniert aber nicht in DllMain, da diese Funktionen aus user32.dll und nicht aus kernel32.dll stammen.

    Also eigene Initialisierungs-Funktion bauen, wie EinGast bereits sagte.



  • Mox schrieb:

    Swordfish schrieb:

    REXPILS schrieb:

    Das "EigeneSteuerelement" soll in dieser DllMain registriert usw. werden.

    Was heißt "registriert werden" und wozu?

    Er meint natürlich RegisterClass/Ex. Das funktioniert aber nicht in DllMain, da diese Funktionen aus user32.dll und nicht aus kernel32.dll stammen.

    Es funktioniert nicht zuverlässig.
    Das Problem ist nur dass es meistens doch funktioniert. Gerade im Fall von USER32 Funktionen, weil die USER32 meist schon geladen & initialisiert ist wenn die DllMain von eigenen DLLs läuft.

    EinGast schrieb:

    Warum muss das bei dir so kompliziert sein?

    Das frag' ich mich auch oft.



  • hustbaer schrieb:

    EinGast schrieb:

    Warum muss das bei dir so kompliziert sein?

    Das frag' ich mich auch oft.

    Ich frage mich eher, warum Ihr Euch künstlich doof stellt. Die Motivation liegt doch auf der Hand: Die DLL wird geladen und die Fensterklassen automatisch registriert (@Swordfish: Fensterklassen registrieren heißt RegisterClass/Ex aufrufen). Das kann für den Anwender schön einfach sein, das Gegenteil von kompliziert. Die ursprüngliche Frage halte ich von daher für mehr als berechtigt.

    Aber da er ja nun weiß, dass das so nicht zuverlässig funktioniert, wird er das ja jetzt auch anders machen (müssen).



  • Und eben das ist, so wie er sich es vorstellt, nicht möglich. Entweder lädt er die DLL, z.B mit LoadLibrary , oder seine EXE muss etwas aus der DLL importieren.

    Das kann auch, wenn es, aus welchen Grund auch immer, DllMain sein muss, eben DllMain sein (in main.cpp einfügen):

    static BOOL (WINAPI *dllmain)(HINSTANCE, DWORD, LPVOID) = DllMain;
    

    Na ja.



  • Alternativ (nicht das jemand noch sagt, es ginge auch anders) kann die Linker-Option /INCLUDE verwendet werden:

    /INCLUDE:__imp__DllMain@12
    

    Das ist jedoch in meinen Augen nicht so einfach wie eine Funktion, die nichts macht oder seine Kontrollelemente registriert, aufzurufen.



  • DLL in EXE einbinden: http://www.oreans.com/xbundler.php
    Man findet auch sicher irgendwo source für sowas..



  • EinGast schrieb:

    Und eben das ist, so wie er sich es vorstellt, nicht möglich.

    <Loriot>Ach was?</Loriot>
    Das haben wir doch nun bereits mehrfach festgestellt.



  • Vielen Dank für die Antworten.

    Dann komm ich wohl nicht drumherum die LoadLibrary-Funktion einzusetzen, wobei die /Include-Variante nicht so schlecht ist.



  • Du sollst eine eigene Init-Funktion machen, hast du das nicht mitbekommen?
    Dann entfällt auch die Notwendigkeit für LoadLibrary oder irgendwelche Linker-Switches.


Anmelden zum Antworten