使用pythoncom创建新实例并强制早期绑定的正确方法



花了太多时间试图自己解决。。。我正在使用一个名为Simcenter Femap的FEA应用程序。在我的程序中,我需要在从基本实例中获得一些数据后创建它的N个新实例,以获得一些异步乐趣。甚至不能从异步部分开始,因为我不能强制对新实例进行早期绑定。目前对我有效的是:

  1. 创建了一个makepy包装器,正如Femap帮助所建议的那样,称为PyFemap,并进行了导入

  2. 连接到正在运行的实例

    femap_object = pythoncom.connect('femap.model')    
    feAppBaseInstance  = PyFemap.model(femap_object)
    

在此之后,每个Femap对象的每个方法都能很好地工作。

  1. 我能够使用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)

最新更新