C++写的dll其中char *参数在python中运用

问题描述

python对C++写的dll进行调用时,遇到输入参数为char *类型,经常报错,或者就是没有报错也根本调用不了库里函数,问题的实质就是类型错误。Python中没有char这种数据,需要将string类型转换。我尝试了一下两种方法,都可以调用成功,分享出来。

解决方式

首先将dll部分,C++中的char *类在python中用c_char_p类型或者ctypes.POINTER(ctypes.c_char)表示都可以

C++中函数
int acsc_OpenCommEthernetTCP(char* Address, int Port)

import  ctypes
dllFile = "ACSCL_x86.dll"
re_io = ctypes.windll.LoadLibrary(dllFile)

openTCP = re_io.acsc_OpenCommEthernetTCP
openTCP.argtype = [ctypes.c_char_p, ctypes.c_int16]
openTCP.restype = ctypes.c_int16

openTCP1 = re_io.acsc_OpenCommEthernetTCP
openTCP1.argtype = [ctypes.POINTER(ctypes.c_char), ctypes.c_int16]
openTCP1.restype = ctypes.c_int16

bytes方式

改变成bytes,传递给函数。

TCPbyte = bytes("10.0.0.100","gbk")
openTCP(TCPbyte, 701)

数组方式

先变成bytes再转数组再变成字符指针

TCPchar = (ctypes.c_char * 100)(*bytes("10.0.0.100","utf-8"))
ctypes.cast(TCPchar, ctypes.POINTER(ctypes.c_char))
openTCP1(TCPchar, 701)

注意凡是string类都需要转换下再输入参数到C++的函数中。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值