花了太多时间试图自己解决。。。我正在使用一个名为Simcenter Femap的FEA应用程序。在我的程序中,我需要在从基本实例中获得一些数据后创建它的N个新实例,以获得一些异步乐趣。甚至不能从异步部分开始,因为我不能强制对新实例进行早期绑定。目前对我有效的是:
-
创建了一个makepy包装器,正如Femap帮助所建议的那样,称为PyFemap,并进行了导入
-
连接到正在运行的实例
femap_object = pythoncom.connect('femap.model') feAppBaseInstance = PyFemap.model(femap_object)
在此之后,每个Femap对象的每个方法都能很好地工作。
- 我能够使用
DispatchEx('femap.model')
创建实例,并调用不需要数据转换的方法
但为了让其余的方法发挥作用,我需要通过现有的包装器(如我所见(强制对这些实例进行早期绑定。
"win32上的Python编程;建议我使用gencache.EnsureModule
创建一个包装器,并将其链接到创建的实例。但是,当我尝试通过类型库的CLSID执行此操作时,我会得到一个错误,即它没有注册。真的没有办法用我已经创建的包装器来完成吗?
还尝试使用comtypes来完成所有这些。有些零件对我来说效果更好,有些则更糟。但最终的结果是一样的。如果可以的话,我也想问一下如何使用comtype。很抱歉,我遗漏了一些非常明显的东西。
我建议使用pythoncom。新建(…(而不是.connect(…(.
我将发布解决方案,因为我解决了这个问题。这其实很明显。我最终在多个实例中使用了pythoncom.New(...)
,但我认为如果您只需要一个方法,其他方法也同样有效。问题是我没有把包装器头类(模型(附加到这些新实例上,这对我来说很愚蠢
创建新实例
femap_object = pythoncom.new('femap.model')
为其分配win32包装器(PyFemap(。
new_instance = PyFemap.model(femap_object)