如何在 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