我正在尝试使用PyQt与Python中的ActiveX COM对象对话。此方法适用于Python:
myobj.dynamicCall('SetAbsMovePos(int, double)', [0, 10])
但是,我不能通过引用发送参数。从文档中,我希望调用的方法是:
int GetNumHWUnits (int lHWType, int& plNumUnits)
基本示例代码是:
QVariantList params = ...
int result = object->dynamicCall("GetNumHWUnits(int, int&)", params).toInt();
我假设Python中使用ctypes的等效代码应该是:
num = ctypes.c_int()
myobj.dynamicCall('GetNumHWUnits(int, int&)', [6, ctypes.byref(num)])
但是num
永远不会更新
Python中的等效代码或解决方法是什么,以及如何使用Python发送和稍后读取int&
类型的参数
从PyQt邮件列表中获取解决方案。需要引用参数列表,因为只更新该列表;原始QVariant对象永远不会被删除。回想起来似乎相当明显
完整的代码示例如this post所示
QVariant
涉及:简而言之,
QVariant
是通过引用传递值的包装器这意味着通过传递
c_int
,您已经将该值包装了两次。尝试将实数QVariant
而不是c_int
作为第二个参数传递。如果没有这一点,PyQt中的自动类型强制将采用c_int
,将其值包装在QVariant
中,调用dynamicCall
。在调用过程中,新的QVariant
会被更新,但与原始的c_int
没有连接,因此您的实例不会更改这应该起作用:
您可以尝试传递仅包含一个元素的列表:
产出:4
相关问题 更多 >
编程相关推荐