In einem VC ++ - Projekt versuche ich eine Instanz (über COM) einer C # -Klasse innerhalb eines C # -Projekts zu erstellen.
Fakten
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!
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 ...
aufrufenDie 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.
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
Tags und Links .net c# visual-c++ com regasm