32-Bit DLL macht Probleme auf 64B-it System
-
Hallo.
Ich habe ein Problem mit meiner 32Bit DLL.
Solange sie in einem 32-Bit-System läuft funktioniert alles wunderbar.
Wenn ich die 32-Bit-DLL nun aber in einem 64-Bit System benutze sind die meisten Funktionalitäten zwar noch gegeben aber zusätzlich passieren Dinge, die nicht passieren sollten.
Die Probleme scheinen aber nur phasenweise aufzutreten, weshalb ich die Ursache bisher leider nicht finden konnte.Mich wundert nun: Sollte eine für x86 kompilierte DLL nicht auch in einem 64-Bit-System funktionieren? Die Anwendung mit der DLL wird ja als 32-Bit-Anwendung ausgeführt (ansonsten dürfte doch kein 32-Bit-Programm unter 64-Bit laufen?!).
Muss ich doch Änderungen am Code vornehmen (obwohl ich weiterhin für x86 kompilieren möchte) damit die Anwendung/DLL auch unter 64 Bit läuft?
Über Aufklärung wäre ich dankbar.
Kompiliert wurde das ganze übrigens mit VC10.
-
Eine 32bit DLL funktioniert "normalerweise" ohne Änderungen auf einem 64bit System. Die Frage ist was die DLL tut.
Greifst Du auf HKLM zu?
Wie behandelst Du die Ordner?
-
Auf die Registry greift die DLL überhaupt nicht zu.
Generell ist die DLL als Plugin zu sehen. Sie exportiert Funktionen die von einer anderen DLL aufgerufen werden.
Die dabei übergebenen Parameter werden dann benutzt.
Unter anderem finden sich auch viele __asm Code Blöcke in der DLL.Ich hab leider immernoch keine Idee woran das liegen könnte.
-
Sag doch mal genau, was denn Dein Problem ist....
Beachte auch: Eine x86 DLL kann nur in x86 Prozessen lufen... also niemals in x64 Prozessen... zwar auf einem x64-OS aber immer nur in einem 32-Bit Prozess...Auch greift je nach ausführendem *Prozess* die x86-Virtualisierung (File/Registry Redirector) oder eben auch nicht... das hängt vom *Prozess* ab und nicht von der DLL...
-
Jochen Kalmbach schrieb:
Beachte auch: Eine x86 DLL kann nur in x86 Prozessen lufen... also niemals in x64 Prozessen... zwar auf einem x64-OS aber immer nur in einem 32-Bit Prozess...
Auch greift je nach ausführendem *Prozess* die x86-Virtualisierung (File/Registry Redirector) oder eben auch nicht... das hängt vom *Prozess* ab und nicht von der DLL...
Natürlich kann z.B. eine 32bit DLL nur von einem 32bit Prozess verwendet werden. Würde man 32Bit und 64Bit zusammenbringen würde LoadLibrary() fehlschlagen.
Der Tipp mit x86-Virtualisierung ist sicher nützlich.
Es scheint zudem Effekte zu geben wenn die DLL z.B. auf einem Netzwerklaufwerk liegt. Vor einiger Zeit (unter XP) ging das noch problemlos ..
-
Was genau das Problem ist kann ich leider momentan noch nicht da der Fehler sich nicht reproduzieren lässt und nur von Zeit zu Zeit auftritt.
Der Prozess selber ist eine 32bit Anwendung (ca. 8 Jahre alte, kein Source vorhanden).
-
Kann es eventuell etwas mit dem Umstieg von Win Server 2003 auf Win Server 2008 zu tun haben?
Da dürfte aber eigentlich auch das gleiche gelten oder?
-
AgurSGast schrieb:
Kann es eventuell etwas mit dem Umstieg von Win Server 2003 auf Win Server 2008 zu tun haben?
Da dürfte aber eigentlich auch das gleiche gelten oder?Nein!
2003 gab es kein UAC! Es ist genauso ein riesen Unterscheid wie zwischen XP und Vista/Win7.Aber nichts desto trotz. Ohne Dumps ohne Sourcecode, wirst Du dem nicht auf die Schliche kommen.