Issue
I'm attempting to use PyQt to talk to an ActiveX COM object in Python. This method works in Python:
myobj.dynamicCall('SetAbsMovePos(int, double)', [0, 10])
However, I can't send arguments by reference. From the docs, the method I wish to call is:
int GetNumHWUnits (int lHWType, int& plNumUnits)
and the basic example code is:
QVariantList params = ...
int result = object->dynamicCall("GetNumHWUnits(int, int&)", params).toInt();
I presume the equivalent code in Python, using ctypes, should be:
num = ctypes.c_int()
myobj.dynamicCall('GetNumHWUnits(int, int&)', [6, ctypes.byref(num)])
but num
is never updated.
What's the equivalent code or workaround in Python, and how can I send and later read an argument of type int&
using Python?
Solution
Got the solution from the PyQt mailing list. A reference to the list of arguments is needed, as only that list is updated; the original QVariant objects never are. Seems fairly obvious in retrospect!
typ = QVariant(6)
num = QVariant(0)
args_list = [typ, num]
self.dynamicCall('GetNumHWUnits(int, int&)', args_list)
print 'Num of HW units =', args_list[1].toInt()[0]
A full code example is shown in this post.
Answered By - 101
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.