【发布时间】:2010-11-03 19:23:00
【问题描述】:
我正在处理以下问题:(第三方)软件 (Software A )我们广泛使用的允许使用组件对象模型(COM)接口(实际上是几个接口)对所谓的“扩展”进行编程。它为这些接口提供 MIDL 文件以及作为 SDK 一部分的 Visual C++ 的“项目模板”(IDL 文件、头文件和接口已经存在,只是缺少接口函数的实现)。为了兼容,所有扩展都必须符合(即必须实现)给定的 COM 接口结构。
但是,由于我对 C++ 的熟悉程度相当有限,我希望在 C# 和 .NET 中实现 COM - 另一方面,预定义接口大量使用指针和自定义数据结构,所以我想知道我是否最好在其原生 C++ 中实现接口,而不是尝试在 C# 中重新创建所有内容。
可能需要更多背景知识:最终目标是从软件 A 内部控制一块自定义硬件(通过 USB)。我已经编写了一个使用 DLLimport 包装驱动程序(另一个第三方软件)的小型 .NET 应用程序,这是令人惊讶的无痛。换句话说,我要构建的 COM 对象本质上是(第三方)软件 A 和(第三方)设备驱动程序 B 之间的桥梁,它必须符合 A 给出的接口规范。
示例 MIDL 代码:
[id(0x00000004)]
HRESULT GetWaveData([in] BSTR name, [out] IWaveData ** data );
[ id(0x00000005)]
HRESULT GetImageData([in] BSTR name, [out] IImageData ** data, [out] Palette * Palette);
[ id(0x00000006)]
HRESULT SetVariable([in] BSTR name, [in] IVariableData * variable );
【问题讨论】: