Klasse nicht registrierter Fehler für Instantiierung des C # -Objekts über COM von VC ++

8

In einem VC ++ - Projekt versuche ich eine Instanz (über COM) einer C # -Klasse innerhalb eines C # -Projekts zu erstellen.

Fakten

  • Sowohl die C # - als auch die C ++ - Projekte werden mit .NET 4.0
  • kompiliert
  • Die C # -DLL wird unter Verwendung von regasm / codebase "CSharpProjectName.dll" "und Windows-Eingabeaufforderungsberichten," Typen erfolgreich registriert. "
  • registriert
  • Im C ++ - Projekt versuche ich eine Instanz einer Klasse im C # -Projekt zu erstellen, aber ich bekomme ein HRESULT von 0x80040154 - Klasse nicht registriert

Hier ist ein Beispiel für meinen Versuch, eine Instanz des .NET-Objekts aus der C # -DLL zu erstellen. Die konkrete Klasse, die ich instanziieren möchte, heißt Employee, die, um meine Frage einfach darzustellen, die IPerson-Schnittstelle implementiert:

%Vor%

Warum erhalte ich den Fehler "Klasse nicht registriert", obwohl ich die c # .dll unter Verwendung von "regasm / codebase" registriert und die Existenz des Schlüssels in der Registrierung bestätigt habe?

Jede Hilfe wäre sehr willkommen. Danke!

    
BigSauce 14.03.2012, 22:11
quelle

3 Antworten

9

Ich hatte dieses Problem in der Vergangenheit und es lag daran, dass beide Prozesse nicht 32 oder 64 Bit waren. Wenn Sie ein 32-Bit-Betriebssystem ausführen, können Sie jetzt aufhören zu lesen, da das, was ich sage, nicht zutrifft.

Verwenden Sie regedit, um Ihre ProgIds und CLSIDs in der Registrierung zu finden. Wenn Ihr C ++ - Projekt 32-Bit ist, stellen Sie sicher, dass Ihre C # -Klassen für die 32-Bit-Struktur registriert wurden - HKEY_CLASSES_ROOT \ Wow6432Node. Wenn Ihr C ++ - Projekt 64-Bit ist, stellen Sie sicher, dass Ihre C # -Klassen in der 64-Bit-Struktur HKEY_CLASSES_ROOT registriert sind.

Wenn Sie sich bei der 64-Bit-Struktur registrieren müssen, müssen Sie möglicherweise die Version von RegAsm.exe unter c: \ windows \ microsoft.net \ framework64 ...

aufrufen

Die andere Möglichkeit, dass etwas schief geht, ist, dass Sie möglicherweise die .NET 4.0-Version von regasm.exe ausführen müssen. Wenn Sie in der Befehlszeile einfach "regasm" eingeben, erhalten Sie die Version von regasm, die Sie gerade ausführen. Sie müssen möglicherweise den vollständigen Pfad der .NET 4.0-Version von regasm eingeben - gefunden unter c: \ windows \ microsoft.net \ framework \ v4.0.3019 \ regasm.exe.

    
Joseph Willcoxson 14.03.2012, 22:51
quelle
1

Haben Sie die Option /tlb versucht? Probieren Sie das aus und dann

%Vor%

Ich denke, die andere Möglichkeit könnte darin bestehen, die Assembly zu gacen und sie dann zu bestätigen.

    
code4life 14.03.2012 22:18
quelle
0

Versuchen Sie, Ihr Projekt in 32 Bits zu belassen, da Sie Ihr Projekt kennen und in einer CPU eine aktive Komponente erstellen, die bei 32 mit einem Registrierungsfehler läuft, also ändern Sie den Build auf 32 oder vorzugsweise auf 32.

Sie registrieren Sie dll mit regsvr32

    
quelle

Tags und Links