带点指针的C函数

时间:2015-05-21 06:12:10

标签: python c ctypes

我在C / C ++ DLL中定义了一个方法,需要2个参数

void SetLines(char** args,int argCount);

我需要从Python调用它,这样做的正确方法是什么。

from ctypes import *
path="test.dll"
lib = cdll.LoadLibrary(path)
Lines=["line 2","line 2"]
lib.SetLines(Lines,len(lines))
print(code)

执行Python代码会出现以下错误:

Traceback (most recent call last):
  File "<test.py>", line 6, in <module>
ctypes.ArgumentError: argument 1: <class 'TypeError'>: Don't know how to convert parameter 1

1 个答案:

答案 0 :(得分:1)

经过一些代码挖掘后我明白了:

接受指向值列表的指针的任何C / C ++参数都应该用

包装在python中
MyType=ctypes.ARRAY(/*any ctype*/,len)
MyList=MyType()

并填写

MyList[index]=/*that ctype*/
在我的案例中,解决方案是:

from ctypes import *
path="test.dll"
lib = cdll.LoadLibrary(path)

Lines=["line 1","line 2"]
string_pointer= ARRAY(c_char_p,len(Lines)) 
c_Lines=string_pointer()
for i in range(len(Lines)):
    c_Lines[i]=c_char_p(Lines[i].encode("utf-8"))

lib.SetLines(c_Lines,len(lines))