带点指针的C函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带点指针的C函数相关的知识,希望对你有一定的参考价值。

我有一个在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
答案

经过一些代码挖掘,我弄清楚了:

任何接受指向值列表的指针的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))

以上是关于带点指针的C函数的主要内容,如果未能解决你的问题,请参考以下文章

使用 std::thread 函数 C++11 将指针作为参数传递

20160211.CCPP体系详解(0021天)

20160211.CCPP体系详解(0021天)

20160210.CCPP体系详解(0020天)

Objective-C Block与函数指针比较

C 语言指针间接赋值 ( 指针作为 函数参数 的意义 | 间接赋值 代码示例 )