如何在 C# 中创建 COM 对象的实例?
How to create an instance of the COM object in C#?
Visual Basic有一个GetObject
函数,可以这样使用
Set app = GetObject(, "Word.Application")
1C Enterprise 也有一个 new COMObject()
运算符,它也接受一个普通字符串和 returns 一个相应的 COM 对象。
此函数的 C# 等效项是什么?
我在 Microsoft.VisualBasic
命名空间中找到了相同的 GetObject
函数。对此还不满意,我反编译了那个函数,发现它是如何创建 COM 对象的:Marshal.GetActiveObject
and Activator.CreateInstance
.
要反映 COM 对象,可以使用 IDispatch::GetTypeInfo
method from Oleauto.h. There is also a neat wrapper for C# on CodeProject。
一些对象,如 1C Automation ("V83.Application") 似乎不能立即与 C# 的 dynamic
一起使用。为了解决这个问题,我创建了一个 class 并继承自 System.Dynamic.DynamicObject
。这允许我覆盖 InvokeMethod
并在其上调用 IDispatch::Invoke
。
您可以使用 Activator.CreateInstance(string Progid)
方法通过传递 COM 的 Prog id 创建 COM 对象 Class
Visual Basic有一个GetObject
函数,可以这样使用
Set app = GetObject(, "Word.Application")
1C Enterprise 也有一个 new COMObject()
运算符,它也接受一个普通字符串和 returns 一个相应的 COM 对象。
此函数的 C# 等效项是什么?
我在 Microsoft.VisualBasic
命名空间中找到了相同的 GetObject
函数。对此还不满意,我反编译了那个函数,发现它是如何创建 COM 对象的:Marshal.GetActiveObject
and Activator.CreateInstance
.
要反映 COM 对象,可以使用 IDispatch::GetTypeInfo
method from Oleauto.h. There is also a neat wrapper for C# on CodeProject。
一些对象,如 1C Automation ("V83.Application") 似乎不能立即与 C# 的 dynamic
一起使用。为了解决这个问题,我创建了一个 class 并继承自 System.Dynamic.DynamicObject
。这允许我覆盖 InvokeMethod
并在其上调用 IDispatch::Invoke
。
您可以使用 Activator.CreateInstance(string Progid)
方法通过传递 COM 的 Prog id 创建 COM 对象 Class