当通过通用对象(后期绑定)获取 COM 对象的方法时,如何在 C# 中调用 COM 对象的方法?

问题描述 投票:0回答:1

我有以下代码,它使用后期绑定返回 COM 对象,以连接到第三方软件:

object app = GetApplication(this.simVersion);
if (app == null ) return null;

GetApplication 使用 Marshal.GetActiveObject 返回一个通用对象来查找用户请求的 COM 对象。它需要后期绑定,因为simVersion是用户指定的软件版本,即每个软件版本都使用几乎相同的类型库,但应用程序定义显然会有所不同。

我想在 app 对象上调用一个名为 ActiveDocument 的方法,我知道它始终存在并返回一种我可以预期并转换为的对象类型,例如:

HYSYS.SimulationCase hyCase = (HYSYS.SimulationCase)app.ActiveDocument();

但是上面的方法显然不起作用,因为 app 是一个通用对象,没有绑定到定义了 ActiveDocument 方法的类型库。我发现了一些关于调用 COM 方法的其他 SO 线程,但看不到任何不涉及使用 Activator 实例化新应用程序的内容,我不想想要在这里执行此操作,即我需要获取对 SimulationCase 对象的引用由 app.ActiveDocument 返回 - 这是一个已在用户计算机上打开的特定文件。

c# com
1个回答
0
投票

感谢 Hans Passant 在评论中提供答案,就这么简单!只需将我所有的object类型更改为dymamic并且能够运行:

HYSYS.SimulationCase hyCase = (HYSYS.SimulationCase)app.ActiveDocument();

我确实还必须设置对 Microsoft.CSharp 的程序集引用,以避免因尝试使用动态类型(至少针对 .NET 4.8)而出现的初始编译器错误。

© www.soinside.com 2019 - 2024. All rights reserved.