c# - 如何使用包裹在 C++ 中的 COM 接口(interface)部署 C# 库?

标签 c# c++ com wrapper

我已经创建了 C# 库,但后来发现某些非托管 C++ 解决方案也需要它。我创建了 COM 接口(interface)(提取接口(interface)、添加 GUID、创建 key 、注册等等)。

我创建了使用 tlb 文件的 C++ 库,并创建了 tlh 文件。目前我正在创建一些简单的 UI 来检查这个包装器是否有效。我的问题是——我应该向客户提供什么,因为我对 COM 对象的这个“签名”过程有疑问。我现在必须部署 - 一个 C# 库及其用 C++ 编写的包装器(带有 .h、.lib 和 .dll - 也许更多?)。我不知道它是否会启动,当它没有在用户系统中注册时?如何处理当用户获得一些文件时他可以立即使用它们?

最佳答案

不,您的客户不需要这个“C++ 包装器”。他们可以很容易地自己生成一个,例如 MSVC++ 中的#import 指令会自动生成。无论如何,他们没有必要使用 C++,COM 可以在任何语言中工作。如果您完全包含任何内容,请考虑演示界面如何工作的演示程序,还可以让他们检查所有内容是否已正确安装并正常工作。

您的客户需要的是类型库,这是一个描述接口(interface)的 .tlb 文件,大多数编译器都可以读取。与 MSVC++ 中的#import 指令一样,.NET 项目中的 Project + Add Reference。类型库与 .NET 程序集中的元数据完全相同。在 C# [ComVisible] 程序集的情况下,它是从 .NET 元数据自动生成的,您在程序集上运行 Tlbexp.exe。您的客户也可以这样做,如果他们这样做会更好,因为 .tlb 之间有保证的匹配。但如果他们不熟悉 .NET 工具,您可以为他们做。

您唯一需要做的就是编写安装程序,以便在客户的机器上正确注册程序集。与 Regasm.exe 一样。强烈支持 [ComVisible] 程序集的 GAC,COM 存在严重的 DLL hell 问题。

关于c# - 如何使用包裹在 C++ 中的 COM 接口(interface)部署 C# 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22244955/

相关文章:

.net - 由于以下错误 : 80040154,检索 CLSID {xxxx} 组件的 COM 类工厂失败

c# - 我如何订阅在另一个程序集中引发的事件

c# - Linq:连续 X 个对象

c++ - 解析来自串口的完整消息

C# - EasyHook CoCreateInstance

c++ - 无法包含 DirectShow 示例并对其进行编译 (PushSourceDesktop)

c# - 向 Microsoft WinForm 控件添加元素

c# - WebService、WebMethod 和继承

c++ - 如何否定 `std::bind` 提供的谓词?

c++ - Qt - 如何创建一个包含 0 个或多个 float 窗口的空白区域