2011-07-29 129 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)