【发布时间】:2010-11-25 06:41:24
【问题描述】:
我是托管 C++/Cli 的新手;我有一个旧的 COM DLL,我已经在 C++/CLI 类中导入了 DLL,但我不确定如何创建 COM 对象的实例并使用它。
有人可以帮忙吗?
【问题讨论】:
标签: c# c++-cli com-interop
我是托管 C++/Cli 的新手;我有一个旧的 COM DLL,我已经在 C++/CLI 类中导入了 DLL,但我不确定如何创建 COM 对象的实例并使用它。
有人可以帮忙吗?
【问题讨论】:
标签: c# c++-cli com-interop
如果注册正确,只需尝试:
Type typeOfCOMObject = Type.GetTypeFromProgID("COMProject.COMClass");
object instanceOfCOMObject = Activator.CreateObject(typeOfCOMObject);
然后使用强制转换或反射来访问对象的方法。
【讨论】:
有几种方法可以从 C++/CLI 访问 COM 对象。
最简单的方法是让 .Net 运行时为 COM 对象创建一个 managed 包装器,就像 natorion 在他的回答中描述的那样。为此,您需要在 Visual Studio 中或使用 tlbimp.exe 命令生成互操作程序集。这与您在其他 .Net 语言(如 C# 和 VB.Net)中所做的相同。
另一种方法是使用#import 指令生成native 包装器。如果 COM 对象使用大量难以编组到 .Net 的本机结构,或者如果您需要控制对象的生命周期,这是最好的方法。
IYourComObject obj;
obj.CreateInstance("YourComObject");
(CreateInstance还有其他重载)
第三种方法是忽略所有生成的包装器手动创建对象。这是您完全控制的最先进和最困难的方法。
CoCreateInstanceEx(__uuidof(yourcomobject), NULL, CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, NULL, 1, &instance)
【讨论】: