2016-07-14 8 views
0

Lassen Sie mich damit beginnen, dass ich wirklich nichts über dlls weiß. Ich habe eine alte MS-Anwendung geerbt, und ich versuche, sie in VS2015 laufen zu lassen. Ich bin mir ziemlich sicher, dass ich die Lösung konvertiert und alles richtig eingerichtet habe, außer für diese eine DLL, auf die im Code verwiesen wird. Ich stellte fest, dass ich einen Verweis auf die bereitgestellte Interop-DLL erstellen und die Eigenschaft "interop types einbetten" auf false setzen musste. Dies stellte alle Fehler zufrieden und ich konnte das Projekt erstellen. Jetzt, wenn ich es ausführe, erhalte ich eine Ausnahme, wenn der Code versucht, die Klasse zu instanziieren. Ich bekommeWie verwende ich diese alte DLL?

Retrieving the COM class factory for component with CLSID {5EA33595-626F-4C08-9392 
-94DE0E344D48} failed due to the following error: 80040154 Class not registered 
(Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). 

Also, wie melde ich mich an die DLL (oder seine Interop?), So kann die Anwendung ausgeführt? Ich glaube nicht, dass ich regsvr32 die DLL - es gibt nur einen Fehler "Initialisierungsroutine fehlgeschlagen". Ich denke, ich möchte regasm die Interop dll?

+0

Wenn Sie diese Nachricht ablehnen, bitte sagen Sie mir warum. –

Antwort

0

Sie registrieren die Interop-DLL nicht, Sie registrieren die DLL die Interop-Punkte zu. Wenn Sie beispielsweise Interop.Foo.dll haben, müssen Sie die dll finden, die mit regsvr32 registriert werden muss: Foo.dll. Sie müssen diese DLL finden und entweder das Programm installieren oder es manuell registrieren.

Eine wichtige Anmerkung, COM-DLLs sind bitversionsspezifisch. Stellen Sie sicher, dass Ihr Projekt nicht auf AnyCPU eingestellt ist. Sie sollten es nur auf x86 oder x64 haben, abhängig davon, welche Bitness die zu referenzierende DLL ist. Wenn es sich um eine x86-DLL handelt und Sie sich auf einem 64-Bit-System befinden, müssen Sie die Version von regsvr32 verwenden, die sich in C:\Windows\SysWOW64\regsvr32.exe befindet. Dies ist die 32-Bit-Version auf 64-Bit-Systemen. Wenn Sie einfach regsvr32.exe in einen beliebigen Ordner neben dem Ordner SysWOW64 eingeben, wird die 64-Bit-Version verwendet, die sich im Verzeichnis C:\Windows\System32\ befindet.

+0

Ok, das ist gut zu wissen. Also, wenn ich "C: \ Windows \ SysWOW64 \ regsvr32.exe Foo.dll" ausführen und ich bekomme "Das Modul konnte nicht geladen werden" - das ist, was ich versuchen sollte zu lösen? –

+0

Ist Foo.dll im Ordner 'C: \ Windows \ SysWOW64' vorhanden? Sie müssen möglicherweise 'C: \ Windows \ SysWOW64 \ regsvr32.exe" C: \ Pfad \ To \ Foo.dll "' Und ja, das ist, was Sie versuchen sollten, zu lösen. Höchstwahrscheinlich wird 'Foo.dll' durch die Installation einer Software oder eines SDK registriert und Sie sollten es nicht manuell registrieren müssen. Finden Sie heraus, woher 'Foo.dll' kommt und installieren Sie diese Software neu. –

+0

Muss es dort kopiert werden? Dies war eine DLL, die intern entwickelt wurde und zu nichts anderem gehört. –