【发布时间】:2014-02-15 10:19:52
【问题描述】:
首先,我是 COM 新手,目前很困惑。我在 MSDN 和一般网络上阅读了很多关于 COM 的文档,但其中很多似乎已经过时且过于复杂。
这是我认为让它发挥作用所必需的。还没有,所以我确定我遗漏了一些东西,但是通过提供我的食谱,我希望有人能发现问题:
- 创建一个 C# 控制台应用程序项目。我把它命名为 CSharpApp
- 创建一个 C++ ATL 项目。我称之为 ComLib.Interop。
- 添加类(模板:ATL Simple Object),我称之为“InteropDemo”
- 在类视图中,右键单击 IInteropDemo 并添加方法 HelloWorld。
- (已删除,保留以保持答案中的编号正确。)
- 编译。
- 将 ComLib.Interop.dll 的引用添加到 CSharpApp。
- 在编译好的 COM dll 上调用 regsrv32.exe,然后在“添加引用...”的 COM 选项卡中选择 DLL
- 在 Program.cs 的 Main 中,创建一个 InteropDemo 类并调用 HelloWorld。
- 利润。
感谢答案,我更新了问题以反映综合解决方案。
【问题讨论】:
-
我认为您不需要步骤 3、4。尝试不使用它们。
-
你可以说COM本身已经过时并且过于复杂,因此它不再真正被开发了。如果您对使用 C++ 开发 COM 服务器/对象很认真,那么我建议您阅读 Don Box 的《Essential COM》一书。在 90 年代末和 2000 年代初,Don 是 COM 大师,之后他开始着手开发 WCF 的第一个版本。价值不菲。
-
@Noseratio 不起作用,我得到this error。但是,在 ComLib.Interop.dll 上手动调用 tlbimp 是可行的,我可以添加 tlbimp 生成的 ComLib.InteropLib.dll。但后来我又遇到了最初的注册问题。更新了问题。
标签: c++ .net com com-interop