gpt4 book ai didi

c++ - 使用 C#/托管代码为免注册 COM 互操作设置 DLL

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:46:32 26 4
gpt4 key购买 nike

我是 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 互操作的“免注册”部分。我看过各种指南,例如 this onethis one ,但我仍然不明白我必须做什么。

所以我的问题是:

无需注册即可加载新创建的 .Net 兼容 COM dll 需要执行哪些基本步骤?

我是否必须为使用 COM dll 的 .Net 应用编写 list ?我是否必须为我的 COM dll 编写 list ?还是 tblimp.exe 从中生成的 DLL?

最佳答案

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

不要那样做。删除该现有引用,然后添加一个新引用,您可以在其中浏览原始非托管 COM DLL。在 Reference Manager 中,单击左侧的 COM,单击 Browse 按钮,然后浏览并选择您的非托管 COM DLL。 Visual Studio 将完成剩下的工作。

关于c++ - 使用 C#/托管代码为免注册 COM 互操作设置 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21330437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com