2017-12-06 5 views
-1

Ich habe meine App als x86 kompiliert. Ich verwende ein VB6 COM Interop in meiner App. Ich habe den Verweis auf "Einbetten Interop-Typ = Ja", "Isolierte = Nein" festgelegt.Embedded Interop REGDB_E_CLASSNOTREG Fehler auf Client-Rechner

Ich brauche nichts auf dem Client-Rechner installieren, nicht einmal die "Interop.MyDLL.dll", es funktioniert magisch, ohne etwas zu installieren.

Ich kann dies leicht auf meinem Testcomputer testen, es funktioniert gut.

Nun wird auf einem Client-Computer der Fehler "System.TypeInitializationException, Klasse nicht registriert, HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)" ausgelöst, wenn ich versuche, auf die DLL zuzugreifen.

Es trat auf, nachdem ich die App neu kompiliert und deployed. Vorher hat es gut funktioniert.

Was könnte der Schuldige hier sein?

+1

Sie müssen die Interop-DLL nicht registrieren (es handelt sich nicht um eine COM-Komponente, sondern nur um Metadatendefinitionen). Aber Sie müssen die VB6 COM-Komponente (dll, ocx, etc.) registrieren. Es gibt keine Magie. –

+0

@SimonMourier OMG, du hast Recht. Die Sache war, dass ich es vor einiger Zeit auf SysWow64 auf meiner Testmaschine installiert habe, also habe ich nicht bemerkt, dass ich es brauchte. Ich danke dir sehr! – tmighty

+0

Vielleicht könnten Sie Ihre Antwort kommentieren. Dann können andere Dummies wie ich die Antwort finden. – tmighty

Antwort

1

Es gibt keine "Magie" mit COM, Sie müssen die VB6 COM-Komponente (Dll, OCX, etc.) registrieren.

Die Interop-.NET-DLL ist keine COM-Komponente, sie enthält nur Metadaten/Bindungen von .NET zu COM und muss daher nicht registriert werden.

PS: in der Tat, nicht wahr zu registrieren, müssen Sie nur die Kunden eine Möglichkeit zu geben, Sie zu finden, so gibt es auch die Möglichkeit, Registration-Free Activation of COM Components: A Walkthrough zu verwenden, aber es kann mehr Arbeit als nur ein Register Haufen Dlls.