2010-11-25 109 views
2

我是托管C++/Cli的新手;我有一个遗留的COM DLL,并且我已经在C++/CLI类中导入了DLL,但是我不确定如何创建COM对象的一个​​实例并使用它。COM对象在C++/CLI中实例化

任何人都可以帮忙吗?

回答

2

如果正确注册简单地尝试:

Type typeOfCOMObject = Type.GetTypeFromProgID("COMProject.COMClass"); 
object instanceOfCOMObject = Activator.CreateObject(typeOfCOMObject); 

然后用石膏或反射来访问对象的方法。

2

有几种方法可以从C++/CLI访问COM对象。

最简单的方法是让.Net运行时为COM对象创建一个托管的包装器,就像natorion在他的答案中所描述的那样。为此,您需要在Visual Studio中生成interop程序集或使用tlbimp.exe命令。这与您在其他.Net语言(如C#和VB.Net)中所做的一样。

另一种方法是使用#import指令生成本机包装。如果COM对象使用很多难以编入.Net的本机结构,或者需要控制对象的生存期,这是最好的方法。

IYourComObject obj; 
obj.CreateInstance("YourComObject"); 

(还有的CreateInstance的其他重载)

的第三种方法是忽略所有已生成包装手手动创建的对象。这是您完全控制的最先进和最困难的方式。

CoCreateInstanceEx(__uuidof(yourcomobject), NULL, CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, NULL, 1, &instance)