C++写的dll其中char *参数在python中运用
python对C++写的dll进行调用时,遇到输入参数为char *类型,经常报错,或者就是没有报错也根本调用不了库里函数,问题的实质就是类型错误。Python中没有char这种数据,需要将string类型转换。我尝试了一下两种方法,都可以调用成功,分享出来。首先将dll部分,C++中的char *类在python中用c_char_p类型或者ctypes.POINTER(ctypes.c_char
·
问题描述
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++的函数中。

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)