2009-09-09 97 views
2

我有一个C#库,用于非托管C++代码中的COM对象。我使用Visual Studio的复选框“Register For Com Interop”注册了该库,并将ComVisible设置为true。类未注册....当试图从非托管C++调用托管C#库

进口TLB到C++应用程序.....当我运行它,我得到一个“类未注册” ......

此之前已经工作,但这个开始发生后,我感动我的C#项目目录到不同的位置....是的,我移动它后,我重新注册了图书馆。

我已经从注册表中删除了所有的引用文件...我甚至试着在它上面做一个gacutil.exe/...没有骰子。

任何人都知道如何解决这个问题?

回答

0

如果您未在您的托管对象上设置显式CLSID,则移动和重建可能会生成新的CLSID。确保你的非托管项目没有一个陈旧的typelib副本。

转到HKCR \ CLSID \ {XXXX}并确保托管对象的类注册指向正确的托管dll。

+0

我在非托管解决方案中清理了我的解决方案,以确保它获得了一个新的类型库.... 通过HKCR \ CLSID,您的意思是库的GUID? – 2009-09-09 18:26:31

+0

不,我的意思是您的对象的CLSID - 您从非托管代码调用CoCreateInstance()时使用的对象。 – 2009-09-09 21:31:53

+0

是啊,我检查,该DLL是在正确的位置 – 2009-09-10 05:56:34

0

在托管代码中使用非托管对象的更好方法是使用C++/CLI。您可以轻松地在本地对象周围创建托管包装。

+0

它的工作方式是否相反?在非托管代码中使用托管对象。 – 2009-09-09 18:33:37

+0

您还可以使用C++/CLI将托管对象封装为本机对象。 – 2009-09-11 18:05:41