我有一个带有一些函数的C ++ - Library(example.dll),并希望从Python中使用它们。我使用ctypes
和Python 2.7,但没有使用Python 3.6。
这里摘自example.h:
extern "C" __declspec(dllexport) LONG _stdcall func1(LPTSTR filename, long cbAddress);
该函数正在解析txt文件,将一些数据加载到内存中并返回此数据的句柄。
我的Python 2.7代码是:
from ctypes import *
mydll = WinDLL(r'C:\temp\example.dll')
txt_path = c_char_p(r'C:\temp\file.txt')
func1 = mydll['func1']
func1.restype = c_long
func1.argtypes = (c_char_p , c_void_p)
handle = func1(txt_path, None)
这是有效的,并返回一个有效的句柄。
使用Python 3.6,第3行会导致错误:
>>> txt_path = c_char_p(r'C:\temp\file.txt')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: bytes or integer address expected instead of str instance
所以我把它改成了
txt_path = c_char_p(b'C:\temp\file.txt')
哪个有效,但导致该功能出现问题。 func1
现在返回0,这是“无法读取txt文件”的实习生错误代码。
我尝试使用不同的类型,但它不起作用,我现在有点卡住了。
有人可以帮忙吗?
答案 0 :(得分:0)
问题只是逃避反斜杠(有人愤世嫉俗的观点可能会说问题是Windows)问题txt_path = c_char_p(b'C:\temp\file.txt')
中的行必须改为:
txt_path = c_char_p(b'C:\\temp\\file.txt')