Python ctypes - Memory read Error when calling a function in a DLL

Edward Xu dwrdx5 at gmail.com
Thu Mar 22 23:23:55 EDT 2012


Hi all,
I'm writing a script to control a *PCMCIA* device, the driver provided by
the vendor is a dll file. I just want to call functions in it, but i just
don't know why I keep getting a *[**The instruction at "0x7c9108d3"
referenced memory at "0xfffffff8". The memory could not be "read"**]. *Here
is the documents say:
*//declaration*
*XLstatus xlGetDriverConfig(XLdriverConfig *pDriverConfig) *
*
*
*typedef struct s_xl_driver_config { *
* unsigned int dllVersion; *
* unsigned int channelCount; *
* unsigned int reserved[10]; *
* XLchannelConfig channel[XL_CONFIG_MAX_CHANNELS]; *
*} XLdriverConfig; *
*
*
*//types*
*typedef struct s_xl_channel_config { *
*
*
* char name [XL_MAX_LENGTH + 1]; *
* unsigned char hwType; *
* unsigned char hwIndex; *
* unsigned char hwChannel; *
* unsigned short transceiverType; *
* unsigned int transceiverState; *
* unsigned char channelIndex; *
*
*
* XLuint64 channelMask; //here *
* unsigned int channelCapabilities; *
* unsigned int channelBusCapabilities; *
* unsigned char isOnBus; *
* unsigned int connectedBusType; *
* XLbusParams busParams; *
* unsigned int driverVersion; *
* unsigned int interfaceVersion; *
* unsigned int raw_data[10]; *
* unsigned int serialNumber; *
* unsigned int articleNumber; *
* char transceiverName [XL_MAX_LENGTH + 1]; *
* unsigned int specialCabFlags; *
* unsigned int dominantTimeout; *
* unsigned int reserved[8]; *
*} XLchannelConfig; *
*
*
*typedef unsigned __int64 XLuint64;*
*
*
*typedef struct {
 *
* unsigned int busType;*
* union {*
* struct {*
* unsigned int bitRate;*
* unsigned char sjw;*
* unsigned char tseg1;*
* unsigned char tseg2;*
* unsigned char sam; // 1 or 3*
* unsigned char outputMode;*
* } can;*
* struct {*
* unsigned int activeSpeedGrade;*
* unsigned int compatibleSpeedGrade;*
* } most;*
* unsigned char raw[32];*
* }data;*
*} XLbusParams; *
There is my python script below:
*
from ctypes import *
vxlapi = WinDLL("vxlapi.dll")
PyxlGetDriverConfig = vxlapi.xlGetDriverConfig
class PyXLchannelConfig(Structure):
 _fields_ = [("Pyname",c_char*32),
 ("PyhwType",c_ubyte),
 ("PyhwIndex",c_ubyte),
 ("PyhwChannel",c_ubyte),
 ("PytransceiverType",c_ushort),
 ("PytransceiverState",c_ushort),
 ("PyconfigError",c_ushort),
 ("PychannelIndex",c_ubyte),
 ("PychannelMask",c_longlong),
 ("PychannelCapabilities",c_uint),
 ("PychannelBusCapabilities",c_uint),
 ("PyisOnBus",c_ubyte),
 ("PyconnectedBusType",c_uint),
 ("PybusParams",c_uint),
 ("PydriverVersion",c_uint),
 ("PyinterfaceVersion",c_uint),
 ("Pyraw_data",c_uint*10),
 ("PyserialNumber",c_uint),
 ("PyarticleNumber",c_uint),
 ("PytransceiverName",c_char*32),
 ("PyspecialCabFlags",c_uint),
 ("PydominantTimeout",c_uint),
 ("PydominantRecessiveDelay",c_ubyte),
 ("PyrecessiveDominantDelay",c_ubyte),
 ("PyconnectionInfo",c_ubyte),
 ("PycurrentlyAvailableTimestamps",c_ubyte),
 ("PyminimalSupplyVoltage",c_ubyte),
 ("PymaximalSupplyVoltage",c_ubyte),
 ("PymaximalBaudrate",c_uint),
 ("PyfpgaCoreCapabilities",c_ubyte),
 ("PyspecialDeviceStatus",c_ubyte),
 ("PychannelBusActiveCapabilities",c_ushort),
 ("PybreakOffset",c_ushort),
 ("PydelimiterOffset",c_ushort),
 ("Pyreserved",c_uint*3)
 ]
class PyXLdriverConfig(Structure):
 _fields_ = [("PydllVersion",c_uint),
 ("PychannelCount",c_uint),
 ("Pyreserved",c_uint*10),
 ("Pychannel",PyXLchannelConfig*64)
 ]
*
if __name__ == "__main__":
 drivercfg = PyXLdriverConfig()
 PyxlGetDriverConfig(byref(drivercfg))
Could you help me out of this, Thank you very much!
-- 
Best Regards
Edward
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20120323/3f39be41/attachment.html>


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /