我正在使用 Pywin32 通过其 COM 库与 Bloomberg 进行通信。这工作相当不错!但是,我偶然发现了一个我认为非常复杂的问题。如果我将 Com 对象的属性 QueueEvents 设置为 True,则程序将失败。在文档中,他们有一个关于此的部分,
如果您的 QueueEvents 属性设置为 True 并且您正在使用 C++ 执行数据控件的低级实例化,那么在您的数据事件处理程序(调用)中,您将需要通过调用 VariantInit() 函数来初始化 pvarResult。这将防止您的应用程序收到重复的报价。
session = win32com.client.DispatchWithEvents(comobj, EventHandler)
session.QueueEvents = True <-- this trigger some strange "bugs" in execution
if "pvarResult" is not initialized
我想我了解这里的理论方面,您需要在 comobject 可以写入之前初始化数据结构。但是,您如何从 Pywin32 执行此操作?我对此一无所知,并且希望有任何想法或指针(!)来说明如何做到这一点。
以下提示都没有帮助。我的程序没有抛出异常,它只是一次又一次地从 COM 对象返回相同的消息......
从文档中:
如果您的 QueueEvents 属性设置为 True 并且您正在使用 C++ 执行数据控件的低级实例化,那么在您的数据事件处理程序(调用)中,您将需要通过调用 VariantInit() 函数来初始化 pvarResult。这将防止您的应用程序收到重复的报价。如果未设置此变量,则数据控件假定您尚未收到数据,然后它将尝试重新发送它。在 MFC 和 Visual Basic 等主要容器中,该标志将由容器自动初始化。请记住,这仅适用于将 QueueEvents 属性设置为 True 的应用程序。