Windows-7-Datenmüll bei DLL



  • Hi,

    ich habe hier ein eigenartiges Problem.

    Ich habe eine DLL, welche mit LoadLibrary() wiederum eine System-DLL, lädt und sich mit GetProcAddress() deren Symbole holt um mit den Funktionen dieser System-DLL zu arbeiten. Diese DLL funktionierte unter XP noch ganz problemlos.

    Unter Windows 7 macht diese DLL enorme Probleme, kurz zusammengefasst liefern die Funktionen der benutzten System-DLL Datenmüll zurück.

    Jetzt habe ich mit im Netz eine alternative Implementierung meiner Software gesucht, die nach dem gleichem Prinzip die gleiche System-DLL verwendet. Wenn ich diese Implementierung (welche den Google Gears entstammt und deswegen sicher nicht SOLCHE Probleme machen sollte) in einer EXE laufen lasse, klappt alles problemlos. Binde ich den Google-Code aber in meine DLL ein, ist der Effekt exakt der Gleiche: die aufgerufenen Systemfunktionen liefern Datenmüll zurück.

    Daraus schließe ich nun langsam, dass sich unter Windows 7 bezüglich DLLs irgend was ganz grundsätzlich geändert haben muss - nur was?

    Hat jemand einen Tipp?

    Blorg


  • Mod

    Blorg schrieb:

    Daraus schließe ich nun langsam, dass sich unter Windows 7 bezüglich DLLs irgend was ganz grundsätzlich geändert haben muss - nur was?

    Nö! Hat sich nichts geändert...



  • Ich rate mal ins Blaue: Evtl. das hier nicht beachtet?

    msdn schrieb:

    It is not safe to call LoadLibrary from DllMain.



  • Ich tippe dass du richtig getippt hast 🙂



  • Nö, die DLL hat gar kein DllMain...



  • Könnte es sein dass du in irgendwelchen Konstruktoren LoadLibrary aufrufst?
    Und dass Objekte von solchen "LoadLibrary im Konstruktor" Klassen global/auf namespace-Scope/als class-static instanziert werden?

    Dann läuft der Code nämlich in der vom Compiler generierten DllMain Funktion...

    Ahja, verrate uns auch bloss nicht zu viel über dein Programm, sonst könnte am Ende noch jmd. helfen.



  • hustbaer schrieb:

    Ahja, verrate uns auch bloss nicht zu viel über dein Programm, sonst könnte am Ende noch jmd. helfen.

    Wenn du meinst, dass dir das was hilft:

    Das Userinterface ist eine wxWidgets-Applikation (compiliert als Shared Libs), aus einer von wxApp abgeleiteten Klasse wird in OnInit() eine andere Klasse erzeugt, die von wxFrame abgeleitet ist.

    Die Funktion meiner Library kann ich aus verschiedenen Kontexten heraus aufrufen: aus dem Konstruktor der von wxFrame abgeleiteten Klasse, aus einem Click-Event eines wxButton und zyklisch aus dem Event eines wxTimers heraus. In allen Fällen tritt dieser Effekt auf (den es so unter XP noch nicht gab).

    Selbst wenn ich meine DLL aufgebe und deren Code direkt mit der wxWidget-Applikation compiliere, bleibt das Problem.

    Das Problem besteht ebenfalls in einer Testapplikation, welche nix mit wxWidgets zu tun hat und lediglich aus main() heraus meine DLL-Funktion aufruft.



  • OK, das war der uninteressante Teil.

    Ich habe eine DLL, welche mit LoadLibrary() wiederum eine System-DLL, lädt und sich mit GetProcAddress() deren Symbole holt um mit den Funktionen dieser System-DLL zu arbeiten

    Wichtig wäre zu wissen WO genau deine DLL LoadLibrary() aufruft.
    Wie sieht der Pfad/Callstack da aus?
    Mach einfach mal vor das entsprechende LoadLibrary() ein DebugBreak() rein, und starte dann das Ding im Debugger. Dann siehst du den Callstack. Den kannst du dann posten, bzw. vielleicht reicht das schon um draufzukommen was schief geht.
    Interessant wäre evtl. noch der genaue Pfad/Name den du an LoadLibrary() übergibst, und wo diese DLL auf dem XP System bzw. Windows 7 System liegt.


Log in to reply