2009-09-09 7 views
2

J'ai une bibliothèque C# que j'utilise pour un objet COM dans du code C++ non managé. J'ai enregistré la bibliothèque en utilisant la case à cocher "Register For Com Interop" de Visual Studio et définissez ComVisible sur true.Classe non enregistrée .... lorsque j'essaie d'appeler une bibliothèque C# gérée à partir d'un C++ non géré

importé le TLB à l'application C++ ..... quand je le lance, je reçois un « Classe non enregistrée » ....

Cela a fonctionné avant, mais commencé à se produire après avoir déplacé le répertoire de mon projet C# à un emplacement différent .... oui j'ai ré-enregistrer la bibliothèque après que je l'ai déplacé.

J'ai supprimé toutes les références du registre ... J'ai même essayé de faire un gacutil.exe/i dessus ... pas de dés.

Quelqu'un sait-il comment résoudre ce problème?

Répondre

0

Si vous n'avez pas de jeu CLSID explicite sur votre objet géré, il est possible que le déplacement et la reconstruction aient généré un nouveau CLSID. Assurez-vous que votre projet non géré n'a pas de copie périmée de typelib.

Accédez à HKCR \ CLSID \ {XXXX} et vérifiez que l'inscription de classe pour l'objet géré pointe vers la DLL gérée correcte.

+0

J'ai nettoyé ma solution dans la solution non gérée pour m'assurer qu'elle obtenait une nouvelle bibliothèque de types .... Par HKCR \ CLSID, voulez-vous dire le GUID de la bibliothèque? –

+0

Non, je veux dire le CLSID de votre objet - celui que vous utilisez en appelant CoCreateInstance() à partir du code non managé. –

+0

oui, j'ai vérifié cela, la DLL est à l'emplacement correct –

0

Une meilleure façon d'utiliser des objets non gérés dans le code managé consiste à utiliser C++/CLI. Vous pouvez facilement créer un wrapper géré autour de l'objet natif.

+0

fonctionne-t-il dans l'autre sens? utiliser un objet géré dans du code non géré. –

+0

vous pouvez également utiliser C++/CLI pour envelopper les objets gérés en tant qu'objets natifs. –

Questions connexes