Dll LoadLibrary will nich.?



  • BorisDieKlinge schrieb:

    hmm.. das ist ein Ansatz.. ! Ja die Dll ist mit einer anderen verknüpft. d.h. wenn die andere Dll nich vorhanden "wäre", könnte ich diese Dll nich laden? hätte gedacht, das erst durch benutzung von funktionen der dll fehler auftreten.. danke

    Nur, wenn die zweite Dll dynamisch geladen wird. Bei einer (normalen) statischen Bindung lädt der Kernel diese sofort mit der ersten Dll. Und wenn es nicht geht, dann wird die erste auch nicht geladen.



  • hmm die verschachtelte Dll welche in meiner Dll verwendet wird, wird dynamisch geladen... Aber das war das Problem... danke



  • Mit "dynamisch" meine ich während der Ausführung einer beliebigen Funktion. Heißt diese Funktion aber DllMain, dann gibts natürlich den Fehler.


  • Mod

    BorisDieKlinge schrieb:

    hmm die verschachtelte Dll welche in meiner Dll verwendet wird, wird dynamisch geladen... Aber das war das Problem... danke

    ⚠ Du weißt hoffentlich, dass es nicht erlaubt ist LoadLibrary aus DLLMain heraus auszuführen ⚠

    It is not safe to call LoadLibrary from DllMain.

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



  • mach ich das, siehe code?



  • BorisDieKlinge schrieb:

    mach ich das, siehe code?

    Dir traue ich alles zu.


  • Mod

    BorisDieKlinge schrieb:

    mach ich das, siehe code?

    1. 100% ACK zum Kommentar von simon.gysi
    2. Wie soll ich diesen Satz anders verstehen:

    hmm die verschachtelte Dll welche in meiner Dll verwendet wird, wird dynamisch geladen... Aber das war das Problem... danke

    3. Sehe ich keinen Code Deiner DLL! Sondern nur den einer EXE!
    Solltest Du also LoadLibrary in Deiner DLL Main ausführen, dann sei gewarnt! Es knallt an den übelsten nicht zu erartenden Ecken.



  • sorry, wir dachten aneinander vorbei;)

    1. Die LoadLibrary meiner exe ruf ich ja in main auf;)
    2. Diese Dll wiederum, also LoadLibrary ruft ne andere Dll in "iniInstance" auf;)
    3. Hab die LoadLibrary nich geschrieben....

    EDIT: (verschrieben)

    1. Die LoadLibrary meiner exe ruf ich ja in main auf;)
    2. Diese Dll wiederum, also RenaLibrary ruft ne andere Dll in "iniInstance" auf;)
    3. Hab die RenaLibrary nich geschrieben....


  • Mod

    Und wie ist diese andere DLL an Deine DLL gebunden? Dynamisch oder implizit?



  • dynamisch..? Loadlibrary..


  • Mod

    OK also dynamisch! Und wann führst Du LoadLibary in Deiner anderen DLL aus?

    Also nur m sicher zu gehen.
    - EXE lädt implizit oder dynmaisch eine DLL A
    - DLL A lädt dann dynamisch DLL B

    Wann macht DLL A?



  • DLL A stellt eine Schnittstelle (eine read/write funktionen) zwischen einem externe Device her.. diese funktionen liest bzw. schreibt die rohdaten vom gerät.

    DLL B stellt eine spezialisrte Schnittstelle (read/write funktionen für best. Typen) zwischen einem exteren Device (über DLL A) her... diese funktionen schreiben/lesen Daten best. Typen (doub,int,string,etc) an das Gerät.

    die EXE verwendent dann die spezialisierten funktionen. ich könnte auch direkt DLL A einbinden, müsste aber die Datenkonvertierung welche, von DDL B übernommen wird auch schreiben:)

    DLL B ist kruz gesagt eine art wrapper:)


  • Mod

    Martin Richter schrieb:

    OK also dynamisch! Und wann führst Du LoadLibary in Deiner anderen DLL aus?



  • BorisDieKlinge schrieb:

    Diese Dll wiederum, also RenaLibrary ruft ne andere Dll in "iniInstance" auf;)



  • BorisDieKlinge schrieb:

    BorisDieKlinge schrieb:

    Diese Dll wiederum, also RenaLibrary ruft ne andere Dll in "iniInstance" auf;)

    von wo aus wird iniInstance aufgerufen?
    Nicht etwa aus Dll- Main?


  • Mod

    Wahrscheinlich ist es InitInstance! Und damit wird natürlich LoadLibray in DlMain ausgeführt! Es ist nämlich vermutlich eine MFC DLL!

    <kopfschüttelnd & händeringend>Ich weiß gar nicht warum ich eigentlich manchmal noch Kommentare schreibe...<kopfschüttelnd & händeringend>



  • jepp ist ne MFC dll;) Ja Martin, zum Glück hab ich dies DLL nich geschrieben, also könnt ihr mir nich ans Bein pinkeln 😃 Wie würde man es denn dann tun, um dllmain zu umgehen... ich lerne gern;) 👍 :schland:



  • BorisDieKlinge schrieb:

    1. Die LoadLibrary meiner exe ruf ich ja in main auf;)
    2. Diese Dll wiederum, also RenaLibrary ruft ne andere Dll in "iniInstance" auf;)
    3. Hab die RenaLibrary nich geschrieben....

    Wie hat dann der Programmierer der RenaLibrary sie immer geladen?


  • Mod

    Das vermeidet man am einfachsten durch Einführen einer Init Funktionin der DLL.

    1. LoadLibray lädt die DLL,
    2. Danach Init ausführen. Diese Init Funktion führt evtl. andere LoadLibraries aus.

    - oder -

    zweite DLL implizit binden an erste binden.



  • Boris@Off schrieb:

    jepp ist ne MFC dll;) Ja Martin, zum Glück hab ich dies DLL nich geschrieben, also könnt ihr mir nich ans Bein pinkeln 😃 Wie würde man es denn dann tun, um dllmain zu umgehen... ich lerne gern;) 👍 :schland:

    Nein du fragst gern, viel zu lernen scheinst du dabei nicht.


Anmelden zum Antworten