c# - 将 C++ COM 对象更新为 C#

标签 c# com com-interop

我们有一个在非托管 C++ 中声明和实现的 COM 接口(interface)。我们不再希望维护此程序集,但确实需要进行一些更改,并且仍然向后兼容。

我想做的是用 C# 编写所有新代码,并使其成为 ComVisible。来自 this thread我看到对 TreatAs 的引用以替换旧界面。

关于 ProgId、Guid 等,我的想法与 Jonathan Peppers 相同。我将实现与旧版本完全相同的接口(interface),作为新实现的包装器。我也在考虑添加与生成的互操作包装器完全相同的 MarshalAs 属性,以确保数据类型相同(如果可能)。

在处理这个问题时,还有什么我应该考虑的吗?任何有经验进行此转换的人?

编辑:我确实有服务器的 IDL 文件。我不确定是否有一种方法可以基于此自动生成代码。 COM 不是我很熟悉的东西。

编辑 问:我应该如何处理现有客户使用的 HRESULT?

添加:认为我应该将其他读者指向 different fix ,这不适用于我的场景,因为我无法使用现有的 com 重新编译所有 .NET 应用程序:

比约纳尔桑兹伯

最佳答案

一种快速入门的方法:

  • 使用 tlbimp 将您现有的 COM 对象导入到 C# 中(或 Visual Studio)
  • 加载.Net Reflector并获取生成的界面以放入您的新项目
  • 用C#实现生成的接口(interface)
  • 将所有import 声明改为export

这应该让您的所有类型和方法签名从一开始就正确无误。这是将现有 COM 接口(interface)移植到 C# 的一个很好的起点。

关于c# - 将 C++ COM 对象更新为 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7079067/

相关文章:

c# - 如何在 C# 中使用鼠标选择 PictureBox.Image 上的区域

c# - C# 中的闪烁文本

c# - UserManager 在创建用户时不初始化属性

dll - 将 32 位 COM DLL 注册到 64 位 Windows 7

c# - 如何将 C# 元组公开给 C++

c# - 线程必须是 STA-Thread,但它已经是

c++ - 使用 COM 互操作时,为什么后期绑定(bind)会修复 "ByRef value type parameter cannot be null"错误?

c# - Windows 拖放通知

C# - 生成类型库 - 指定库名称?

c# - 创建 COM 互操作类的实例