python PyQt4 का उपयोग कर ActiveX COM ऑब्जेक्ट में तर्क नहीं चला सकते



(1)

मैं थोरलैब्स एपीटीएक्टिक्स नियंत्रण से बात करने के लिए कुछ पायथन कोड लिखने की कोशिश कर रहा हूं। मैं इस कोड पर पाया गया कोड पर अपना कोड लगा रहा हूं, लेकिन wxPython ActiveX कंटेनर के बजाय PyQt4 ActiveX कंटेनर का उपयोग करने की कोशिश कर रहा हूं। यह एक बहुत ही सरल ActiveX विधियों के लिए काम करता है, फिर भी, मुझे एक त्रुटि मिलती है जब कोई विधि कॉल करने की कोशिश करती है जो तर्क लेती है।

यह कोड काम करता है और थोरलैब्स एपीटी के लिए बॉक्स को दिखाता है:

import sys
from ctypes import *

from PyQt4 import QtGui
from PyQt4 import QAxContainer

class APTSystem(QAxContainer.QAxWidget):

    def __init__(self, parent):
        self.parent = parent
        super(APTSystem, self).__init__()

        self.setControl('{B74DB4BA-8C1E-4570-906E-FF65698D632E}')

        # calling this method works    
        self.AboutBox()

app = QtGui.QApplication(sys.argv)        
a = APTSystem(app)

जब मैं self.AboutBox() को self.AboutBox() हूं। self.AboutBox() तर्क के साथ एक विधि के साथ उदाहरण:

num_units = c_int()
self.GetNumHWUnitsEx(21, byref(num_units))

मुझे एक त्रुटि मिलती है: TypeError: unable to convert argument 1 of APTSystem.GetNumHWUnitsEx from 'CArgObject' to 'int&'

मुझे तर्क है कि तर्क प्रकार को एक सीटीआईपी प्रकार की आवश्यकता है। क्या कुछ सीटीपीज़ जादू है जो इसे हल कर सकता है?


निकलता है कि मेरे पास सिंटैक्स काफी गड़बड़ था, यहां बताया गया है कि generateDocumentation() फ़ंक्शन का उपयोग करके इसे बाहर किया गया है , और कुछ पैरामीटर यहाँ से सहायता करता है कार्य कोड ऐसा दिखता है:

import sys
from PyQt4 import QtGui
from PyQt4 import QAxContainer
from PyQt4.QtCore import QVariant

class APTSystem(QAxContainer.QAxWidget):

    def __init__(self, parent):

        super(APTSystem, self).__init__()

        # connect to control
        self.setControl('{B74DB4BA-8C1E-4570-906E-FF65698D632E}')

        # required by device
        self.dynamicCall('StartCtrl()')

        # args must be list of QVariants
        typ = QVariant(6)
        num = QVariant(0)
        args = [typ, num]

        self.dynamicCall('GetNumHWUnits(int, int&)', args)

        # only list items are updated, not the original ints!
        if args[1].toInt()[1]:
            print 'Num of HW units =', args[1].toInt()[0]

        self.dynamicCall('StopCtrl()')

app = QtGui.QApplication(sys.argv)        
a = APTSystem(app)

args सूची में दूसरा आइटम सही मान होता है, लेकिन कॉल को कॉल द्वारा कभी भी अपडेट नहीं किया जाता है।