2017-05-31 70 views
-1

Visual Basic中具有GetObject功能,其可以这样如何在C#中创建COM对象的实例?

Set app = GetObject(, "Word.Application") 

1C企业可以使用也具有new COMObject()运算符,它也需要一个普通的字符串并返回相应的COM对象。

这个函数的C#等价物是什么?

+0

VB默认不是类型安全的,C#是,通常你必须有生成Interop包装打字安全的COM对象,然后才能在C#中使用它,请参阅https://msdn.microsoft.com/zh-cn/library/ms404285(v=vs.110).aspx – MikeT

回答

0

我在Microsoft.VisualBasic命名空间中发现了相同的GetObject函数。不满意这一点,我已经反编译该函数,并发现它如何创建COM对象:Marshal.GetActiveObjectActivator.CreateInstance

要反思COM对象,可以使用Oleauto.h中的IDispatch::GetTypeInfo方法。对于C#CodeProject也有一个整洁的包装。

一些对象,如1C自动化(“V83.Application”)似乎不适用于C#的dynamic马上。为了解决这个问题,我创建了一个类,并从System.Dynamic.DynamicObject继承。这使我可以覆盖InvokeMethod并在其上呼叫IDispatch::Invoke

0

可以使用Activator.CreateInstance(string Progid)方法通过将COM类的程序ID来创建一个COM对象