【发布时间】:2011-03-28 08:53:51
【问题描述】:
我注意到 MIDL.exe 只为 C/C++ 生成头文件 (_h.h) 和 GUID 文件 (_i.c)。这有助于在 C/C++ 中创建 COM。
如果我想用 VB 或其他语言创建 COM 怎么办? IMO,我必须先用MIDL语言定义接口,然后用MIDL.exe编译。那么其他语言如何利用 MIDL.exe 的输出呢?
非常感谢。
【问题讨论】:
我注意到 MIDL.exe 只为 C/C++ 生成头文件 (_h.h) 和 GUID 文件 (_i.c)。这有助于在 C/C++ 中创建 COM。
如果我想用 VB 或其他语言创建 COM 怎么办? IMO,我必须先用MIDL语言定义接口,然后用MIDL.exe编译。那么其他语言如何利用 MIDL.exe 的输出呢?
非常感谢。
【问题讨论】:
VB6 和 .NET 等运行时环境将 COM 视为一等公民,不需要 midl.exe 提供的管道。 VB6 类自动是实现 IDispatch 的 COM coclass。 .NET 具有 [ComVisible] 等属性。他们的运行时环境实现了所需的粘合。
C++ 中没有这种胶水,你必须自己写。或者利用 ATL 之类的类库。然而,它确实允许超越 oleauto 的范围,例如实现派生自 IUnknown 的接口和创建自定义编组器。
【讨论】:
如果您想在 VB.NET 中编写 COM 组件,您不会在 MIDL 中定义接口。相反,您将以通常的 .NET 方式编写托管接口和实现它的类。然后,您创建 ComVisible 类和接口,并安排您的项目为生成的程序集创建 Com Callable Wrappers。
请记住,您以这种方式创建的内容将依赖于 .NET Framework。
【讨论】: