【发布时间】:2019-06-12 23:22:21
【问题描述】:
好吧,伙计们,这很长,所以请多多包涵。我将首先声明我是 - 出于所有意图和目的 - 一个菜鸟。
我正在尝试使用 IronPython 链接到正在运行的程序实例 (ETABS)。该程序有一个 API 和关于如何挂钩到正在运行的实例的体面文档 (EXAMPLE)。但是,他们的示例适用于 Python、C#、VB.net,但不适用于 IronPython。
我认为没什么大不了的,可以使用 Marshal 模块来连接它。所以我尝试了这个:
from System.Runtime.InteropServices import Marshal
csiApp = Marshal.GetActiveObject("CSI.ETABS.API.ETABSObject")
SapModel=csiApp.SapModel
不幸的是,我在最后一行出现错误 - “ETABSObject 没有属性 SapModel”。
是的,我也尝试使用 csiApp.SapModel() 运行它,结果相同。
所以我更深入地研究了它,显然需要将对象转换为另一种类型 - 至少 C# 示例 (LINK) 是这样做的。因为 - 据我所知 - 我们不能真正在 Python 中转换对象(是的,我已经尝试过 clr.Convert)我得出的结论是,返回到 Ironpython 的对象是从对象中删除的一些抽象我真的需要。显然,comtypes 可以在后台自动处理这个问题(看到 python 示例完美地工作)。下面的代码块分别显示了返回到 Ironpython 和纯 python 的对象类型:
Ipy : <System.MarshalByRefObject object at 0x000000000000002B [CSI.ETABS.API.ETABSObject]>
Python with comtypes : <POINTER(cOAPI) ptr=0x2e68d17f7c8 at 2e690b36a48>
我正在使用 Ironpython 2.7.3 并且无法真正更新它(由于与本文无关的几个原因)。希望获得有关如何解决此问题或如何在 Ipy 上安装 comtypes 的建议。
【问题讨论】:
标签: com ironpython comtypes