野草牧歌 2022-03-30 16:05 采纳率: 0%
浏览 72

python调用dll,结构体怎么传参?

用python的ctypes库调用dll文件,c#是结构体传参,python怎么传参,用过元组,字典,类,都无法识别

c#的代码示例如下,中间是结构体

#include "ECanVci.h" 
int nDeviceType = 3; // USBCAN-I
int nDeviceInd = 0; // 索引号为0
int nCANInd = 0; 
int nReserved = 0; 
DWORD dwRel; 


//结构体
INIT_CONFIG init_config;
init_config.AccCode = 0;
init_config.AccMask =0xffffff;
init_config.Filter = 0;
//500k
init_config.Timing0 = 0;
init_config.Timing1 = 0x1c;
init_config.Mode = 0;
//结构体


dwRel = InitCAN(nDeviceType, nDeviceInd, nCANInd,&init_config)

nDeviceType = 4    # 设备类型号。USBCAN I 选择3,USBCAN II 选择4nDeviceInd = 0     #设备索引号,比如当只有一个设备时,索引号为0,有两个时可以为01
nCANInd = 0        #第几路CAN。即对应卡的CAN通道号,CAN0为0,CAN1为1nReserved =0       #参数无意义。
#有问题的传参
class INIT_CONFIG:
    AccCode=0
    AccMask=ctypes.c_int(0xffffff)
    Filter=0
    Timing0=0
    Timing1=ctypes.c_int(0x1c)
    Mode=0
init_config = INIT_CONFIG()
#有问题的传参
init = vc_dll.InitCAN(nDeviceType,nDeviceInd,nCANInd, init_config)

报错如下:
ArgumentError: argument 4: <class 'TypeError'>: Don't know how to convert parameter 4

怎么才能用python,代替c#的结构体传参?

  • 写回答

1条回答 默认 最新

  • 於黾 2022-03-30 16:37
    关注

    首先这根本不是C#
    其次,写dll的时候,参数应该用通用类型(值类型),不要用c语言特有的类型,那样其他语言就没法调用了

    评论

报告相同问题?

问题事件

  • 创建了问题 3月30日

悬赏问题

  • ¥15 mysql将查询的结果作为动态列名怎么实现
  • ¥50 python自动地图截图脚本
  • ¥15 悬赏一本书(内含Matlab代码)的书名、作者
  • ¥20 瑞萨RA4M1芯片刷写为arduino r4 minima
  • ¥15 前端vue跟后端java服务部署在线上阿里云服务器
  • ¥15 fastreport怎么判断当前页数
  • ¥15 Kylin-Desktop-V10-GFB-Release-JICAI_02- 2207-Build14-ARM64.iso有没有这个版本的系统啊
  • ¥15 能不能通过蓝牙将传感器数据传送到手机上
  • ¥20 100元python和数据科学实验项目
  • ¥15 根据时间在调用出列表