使用python来调用可以通讯的DLL实现方法

  

由于工作上的需要,经常要与USBCAN打交道,但厂家一般不会提供PYTHON的例子,于是自己摸索地写一个例子出来,以便在工作上随时可以使用PYTHON来测试可以的功能。这里的例子是使用珠海创芯科技有限公司的USBCAN接口卡,他们提供一个ControlCAN.dll,也提供了一个. h文件,如下:

        的ifndef CONTROLCAN_H   #定义CONTROLCAN_H////文件版本:v2.00 20150920//# include & lt; cvidef.h>//使用CVI平台开发,请使用该语句。//接口卡类型定义      #定义vci_usbcan1 3   #定义vci_usbcan2 4   #定义vci_usbcan2a 4      #定义VCI_USBCAN_E_U 20   #定义VCI_USBCAN_2E_U 21//函数调用返回状态值   #定义status_ok 1   #定义status_err 0/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -兼容ZLG的函数及数据类型- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *///1. zlgcan系列接口卡信息的数据类型。   typedef struct _VCI_BOARD_INFO {   无符号短hw_version;   无符号短fw_version;   无符号短dr_version;   无符号短in_version;   无符号短irq_num;   无符号字符can_num;   char str_serial_num [20];   char str_hw_type [40];   无符号短保留[4];   * PVCI_BOARD_INFO} VCI_BOARD_INFO;//2 .定义可以信息帧的数据类型。   typedef struct _VCI_CAN_OBJ {   unsigned int id;   unsigned int时间戳;   无符号字符timeflag;   无符号字符sendtype;   无符号字符remoteflag;//是否是远程帧   无符号字符externflag;//是否是扩展帧   无符号字符datalen;   无符号字符数据[8];   无符号字符保留[3];   * PVCI_CAN_OBJ} VCI_CAN_OBJ;//3 .定义初始化能的数据类型   typedef struct _VCI_INIT_CONFIG {   无符号长acccode;   无符号长accmask;   无符号长保留;   无符号字符过滤;   无符号字符timing0;   无符号字符timing1;   无符号字符模式;   * PVCI_INIT_CONFIG} VCI_INIT_CONFIG;/////////新加结构滤波器/////////typedef struct _VCI_FILTER_RECORD {   无符号长extframe;//是否为扩展帧   无符号长开始;   无符号长结束;   * PVCI_FILTER_RECORD} VCI_FILTER_RECORD;      #定义externc外来的“C”      EXTERNC无符号长__stdcall VCI_OpenDevice(无符号长DeviceType,无符号长DeviceInd,无符号长保留);   EXTERNC无符号长__stdcall VCI_CloseDevice(无符号长DeviceType,无符号长DeviceInd);   EXTERNC无符号长__stdcall VCI_InitCAN(无符号长DeviceType,无符号长DeviceInd,无符号长CANInd PVCI_INIT_CONFIG pInitConfig);      EXTERNC无符号长__stdcall VCI_ReadBoardInfo(无符号长DeviceType,无符号长DeviceInd PVCI_BOARD_INFO pInfo);      EXTERNC无符号长__stdcall VCI_SetReference(无符号长DeviceType,无符号长DeviceInd,无符号长CANInd,无符号长RefType, void * pData);      EXTERNC无符号长__stdcall VCI_GetReceiveNum(无符号长DeviceType,无符号长DeviceInd,无符号长CANInd);   EXTERNC无符号长__stdcall VCI_ClearBuffer(无符号长DeviceType,无符号长DeviceInd,无符号长CANInd);      EXTERNC无符号长__stdcall VCI_StartCAN(无符号长DeviceType,无符号长DeviceInd,无符号长CANInd);   EXTERNC无符号长__stdcall VCI_ResetCAN(无符号长DeviceType,无符号长DeviceInd,无符号长CANInd);      EXTERNC无符号长__stdcall VCI_Transmit(无符号长DeviceType,无符号长DeviceInd,无符号长CANInd PVCI_CAN_OBJ pSend,无符号长兰);   EXTERNC无符号长__stdcall VCI_Receive(无符号长DeviceType,无符号长DeviceInd,无符号长CANInd PVCI_CAN_OBJ pReceive,无符号长兰,int WaitTime);/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -其他补充函数及数据结构描述- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *///USB-CAN总线适配器板卡信息的数据类型1,该类型为VCI_FindUsbDevice函数的返回参数。   typedef struct _VCI_BOARD_INFO1 {   无符号长hw_version;   无符号长fw_version;   无符号长dr_version;   无符号长in_version;   无符号长irq_num;   无符号字符can_num;   无符号字符保留;   char str_serial_num [8];   char str_hw_type [16];   char str_usb_serial [4] [4];   * PVCI_BOARD_INFO1} VCI_BOARD_INFO1;//USB-CAN总线适配器板卡信息的数据类型2,该类型为VCI_FindUsbDevice函数的返回参数。为扩展更多的设备   typedef struct _VCI_BOARD_INFO2 {   无符号长hw_version;   无符号长fw_version;   无符号长dr_version;   无符号长in_version;   无符号长irq_num;   无符号字符can_num;   无符号字符保留;   char str_serial_num [8];   char str_hw_type [16];   char str_usb_serial [10] [4];   * PVCI_BOARD_INFO2} VCI_BOARD_INFO2;         #定义externc外来的“C”      EXTERNC无符号长__stdcall VCI_GetReference2(无符号长DevType,无符号长DevIndex,无符号长CANIndex,无符号长保留,unsigned char * pData);   EXTERNC无符号长__stdcall VCI_SetReference2(无符号长DevType,无符号长DevIndex,无符号长CANIndex,无符号长RefType unsigned char * pData);         EXTERNC无符号长__stdcall VCI_ConnectDevice(无符号长DevType,无符号长DevIndex);   EXTERNC无符号长__stdcall VCI_UsbDeviceReset(无符号长DevType,无符号长DevIndex,无符号长保留);   EXTERNC无符号长__stdcall VCI_FindUsbDevice (PVCI_BOARD_INFO1 pInfo);   EXTERNC无符号长__stdcall VCI_FindUsbDevice2 (PVCI_BOARD_INFO2 pInfo);            # endif      

使用python来调用可以通讯的DLL实现方法