如何使用pyqt5将VARIANT *传递给ocx?

时间:2018-04-02 06:39:52

标签: python pyqt5 variant

我对PyQt5很新。 我现在正在尝试调用ocx函数,它将VARIANT *类型作为参数。 所以我创建了QVariant变量并将其抛入函数中,但我只能得到错误。

函数原型是:

LONG ReceiveProcDataArr(LONG nRqID, BSTR sProc, LONG nOutRecIndex, VARIANT* pArrData)

我尝试使用以下代码:

from PyQt5.QtCore import QVariant
ocx_module = QAxWidget("[ocx control]")

# some codes to skip...

data = QVariant()
item_length = ocx_module.dynamicCall("ReceiveProcDataArr(int, QString, int, QVariant&)", [rqID, proc, 0, data])

我收到了错误:

Error calling IDispatch member ReceiveProcDataArr: Type mismatch in parameter 3

我可以使用“ocx_module”,它不接受参数或仅采用int / string类型,如:

success = ocx_module.dynamicCall("Init()")
success = ocx_module.dynamicCall("Login(QString, QString)", user_id, user_pw)

我的环境是:

  • windows 10 pro
  • python 3.6 x86
  • pyqt5 == 5.9

我搜索了一会儿,但我找不到关于此的答案。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

这对我有用:

list1 = ["VW SPL", 0]
print(ocx.dynamicCall('ReadVariable(QVariant, QVariant&)', list1))
print(list1)

在你的情况下试试这个:

data = [rqID, proc, 0, 0]
item_length = ocx_module.dynamicCall("ReceiveProcDataArr(QVariant, QVariant, 
QVariant, QVariant&)", data)
print(data[3])

请注意,引用只会更新列表:

int foo = 0
data = [rqID, proc, 0, foo]
item_length = ocx_module.dynamicCall("ReceiveProcDataArr(QVariant, QVariant, 
QVariant, QVariant&)", data)
print(data[3])//It prints the result
print(foo)//It prints 0