首页 文章

使用C#/托管代码为免注册COM Interop设置DLL

提问于
浏览
2

我是COM的新手,必须为C dll创建一个COM包装器,以使托管代码可以访问它的某些功能 . 我主要跟着this tutorial on code project来创建一个COM ATL dll . 我创建了一个后构建步骤,调用COM dll上的tlbimp.exe来创建包装 .

添加对tlbimp.exe创建的dll的引用有效,并且我获得了COM dll上的方法的代码完成,并且可以编译使用该dll的托管代码 . 但是,运行该代码会导致以下异常:

Unhandled Exception: System.Runtime.InteropServices.COMException: Retrieving the COM class factory 
for component with CLSID {FD6F73D2-0208-455A-953A-C911EC2CAEAB} failed due to the following error: 
80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
//...

如果我正确理解了这个异常和MSDN上的文档,那么下一步就是设置免注册COM互操作的'registration-free'部分 . 我看了各种指南,如this onethis one,但我仍然不明白我必须做什么 .

所以我的问题是:

在没有注册的情况下,我需要采取哪些基本步骤才能使我新创建的.Net兼容COM dll加载?

我是否必须为使用COM dll的.Net应用程序编写清单?我是否必须为COM dll写一个清单?或者tblimp.exe从中生成的DLL?

1 回答

  • 2

    我相信您在解决方案资源管理器中看不到 Isolated 属性,因为您使用tlmbimp.exe手动生成了Interop程序集,然后将其添加到项目中 .

    Don 't do that. Remove that existing reference, then add a new one, where you' d浏览原始的非托管COM DLL . 在Reference Manager中,单击左侧的 COM ,单击 Browse 按钮,然后浏览并选择您的非托管COM DLL . Visual Studio将完成剩下的工作 .

相关问题