2010-12-13 6 views
0

Ich entwickelte MFC Regular DLL "Static Linked" mit vs2005. Wenn es als 32-Bit-DLL kompiliert wurdeLoadLibrary Problem auf Win7 (64-Bit)

Ich kann es mit "LoadLibrary" von meinem Computer oder von einer anderen Maschine laden.

aber wenn es als 64-Bit-DLL kompilieren kann ich es nur von meinem Rechner laden.

Ich überprüfe meinen Code und gefundene globale Objekt deklariert.

MyClass myObj; 

wenn ich kommentieren diese object..I DLL und von diffrent machine.but wenn eine

globale Objekt verwenden Sie laden kann ... Ich kann meine DLL aus diffrenet Maschine nicht geladen werden.

kann mir jemand helfen?

+1

Sind andere Maschinen 64-Bit-kompatibel? –

+0

yes..it Win7 64-Bit auch – NMM

+2

hat Ihre DLL irgendwelche Abhängigkeiten? Verwenden Sie depends.exe von sysinternals – Benoit

Antwort

2

wenn ich versuche, "GetLastError" es Nummer zurück zu verwenden, wie "-529697949"

Der Fehlercode ist 0xE06D7363, die letzten drei hexadezimalen Ziffern buchstabieren "MSC". Das ist der Ausnahmecode für eine C++ - Ausnahme in Microsoft Compiler.

Ihr Code bombardiert eine nicht abgefangene C++ - Ausnahme, wahrscheinlich in DllMain() geworfen. Sie benötigen einen Debugger, wenn Sie ihn nicht aus diesem Hinweis zurückentwickeln können.

+0

Kannst du erklären, wie ich das machen kann? – NMM

+0

Ich habe keine DLLmain in meiner DLL – NMM

+0

Nun, ich kann nur raten. Gehen Sie nach dem, was der Debugger Ihnen sagt. –

0

Die nicht abgefangene C++ - Ausnahme kann auch ausgelöst werden, während die globalen/statischen Objekte Ihrer DLL erstellt/zugeordnet/initialisiert werden (was Teil von DllMain ist). Es besteht also eine gute Chance, dass irgendwo im Code eine gültige throw-Anweisung für dieses Verhalten verantwortlich ist (und nicht irgendein Compiler/Architektur/Plattform-Bug; vielleicht ist es nur ein define, das x64-spezifisch ist?).

Um diese fiesen kleinen * # !! zu finden:

  • Compile all Ihren Code mit Debug-Informationen (/ debug)
  • Schalten Sie das Symbol Server (Debug/Optionen/Debugging/Symbole/Symboldatei (.pdb) Speicherorte: [x] Microsoft Symbol Server)
  • Alle Ausnahmen aktivieren (Debug/Exceptions .../Alle [] in der Spalte "Thrown" markieren)
  • Debugging starten und Sie werden schließlich finde den richtigen Ort.

Aufgrund der fehlenden erzwungenen "Würfe" Anweisung wie z. in Java (in C++ ist es optional und ziemlich nutzlos; siehe Throw keyword in function's signature), das try/catch/throw-System ist kaum verwendbar, um robusten und wartbaren Code zu erstellen; Es ist fast so, als würde man zufällige Gotos überall verstecken.