Python Pywin-通过调用VariantInit()初始化pvarResult

Python Pywin-通过调用VariantInit()初始化pvarResult,python,com,pywin32,bloomberg,Python,Com,Pywin32,Bloomberg,我正在使用Pywin32通过彭博的COM库与彭博进行通信。这个效果相当好!然而,我已经发现了一个我认为相当复杂的问题。如果我将Com对象的属性QueueEvents设置为True,则程序将失败。在文件中,他们有一个关于这方面的章节 如果QueueEvents属性设置为 是的,您执行的是低级别 数据控件的实例化 使用C++,然后在数据事件中 处理程序(调用)将需要您 通过调用 VariantInit()函数。这将 阻止您的应用程序 接收重复的滴答声 session=win32com.client.

我正在使用Pywin32通过彭博的COM库与彭博进行通信。这个效果相当好!然而,我已经发现了一个我认为相当复杂的问题。如果我将Com对象的属性QueueEvents设置为True,则程序将失败。在文件中,他们有一个关于这方面的章节

如果QueueEvents属性设置为 是的,您执行的是低级别 数据控件的实例化 使用C++,然后在数据事件中 处理程序(调用)将需要您 通过调用 VariantInit()函数。这将 阻止您的应用程序 接收重复的滴答声

session=win32com.client.DispatchWithEvents(comobj,EventHandler)

session.QueueEvents=True我不确定这是否有助于解决您的问题,但要使COM事件在Python中工作,您不应该忘记:

  • 将COM公寓设置为免费 在脚本开始时线程化 文件这可以通过使用 以下几行

    import sys
    sys.coinit_flags = 0
    
  • 在调用第一个DispatchWithEvents之前为com库生成包装器

    from win32com.client.makepy import GenerateFromTypeLibSpec
    GenerateFromTypeLibSpec("ComLibName 1.0 Type Library")
    

如果您可以发布程序如何失败(COM对象失败或python出现一些异常),也许我可以提供更多建议。

这些都没有任何区别。我的程序没有抛出异常,它只是一次又一次地从COM对象返回相同的消息。。。我在上面的问题中添加了更多信息。
from win32com.client.makepy import GenerateFromTypeLibSpec
GenerateFromTypeLibSpec("ComLibName 1.0 Type Library")