2011-07-29 132 views
1

我正在使用WWAN卡的自定義SDK。我想能夠從python的dll訪問函數。我已經閱讀了加載DLL和訪問函數。Python中的參考參數

我堅持的部分是使用具有引用參數和數組的函數,並在python中使用它們。

這裏是一個功能我需要幫助的文檔頁面:\ http://i.imgur.com/0W20Q.png

我把DLL到SYSTEM32這樣我就可以訪問它沒有一個直接的路徑。

到目前爲止,我有:

from ctypes import * 
sdk = windll.GobiConnectionMgmt 
sdk.QCWWAN2kEnumerateDevice() 

我不確定如何格式化參數和返回類型。任何幫助都是極好的。

+0

什麼是'BYTE' typedef'd? 'char'? – delnan

+0

我真的不確定。雖然我會這樣認爲。 – davetheman

回答

0

嗯,我想pDevicesSize應該是整數, 和pDevices應該對象,它的類有DEVICEID(STR)和deviceKey(STR)的屬性的列表。

0

以正確的設備格式聲明一個結構並傳遞它,這將使設備在返回時更容易處理。下面是一個例子:

from ctypes import * 

class Device(Structure): 
    _fields_ = [ 
     ('id',c_ubyte * 256), 
     ('key',c_ubyte * 16)] 

sdk = windll.GobiConnectionMgmt 
enumerate_device = sdk.QCWWAN2kEnumerateDevices 
enumerate_device.restype = c_ulong 
enumerate_device.argtypes = [POINTER(c_ubyte),POINTER(Device)] 

max_devices = 3 
# create a c_ubyte object that can be passed by reference to get the out value. 
c = c_ubyte(max_devices) 
# create an array of devices 
s = (Device * max_devices)() 
enumerate_device(byref(c),s)