为了与另一个用 .Net 2.0 编写的项目兼容,我们不得不提出一个 COM 互操作(较新的应用程序在 .Net 4.0 中)。这会起作用,因为 2.0 进程将能够在 .Net 4.0 中使用 SxS 执行。为了根据我的理解进行 COM 互操作,我必须执行以下操作:
Type myClass = Type.GetTypeFromProgID("Net4Assembly.Assembly4");
object myInstance = Activator.CreateInstance(myClass);
IAssembly4 assembly4Interface = (IAssembly4)myInstance;
assembly4Interface.CallMethod();
我已经创建了 COM 组件并注册了它,这工作正常。但问题是,由于用 2.0 编写的项目在我们部门之外,我想找到一种方法来使用反射在上面的第 3 行中进行转换。到目前为止,我在使用 COM 对象上的反射的 Invoke 方法中找到了建议
但这对我不起作用,因为当我在 COMObject 类型的“myInstance”中获取对象的所有方法时,我只能看到该链接中提到的方法。我收到此错误:
未知名称。(来自 HRESULT 的异常:0x80020006 (DISP_E_UNKNOWNNAME))
我想我应该以某种方式将其COMObject
转换为接口,然后我就可以访问这些方法了?我不应该能够从 中提取接口COMObject
,然后使用反射调用该方法吗?我尝试GetInterfaces(
了 )COMObject
但没有返回任何内容。