我正在使用C ++中的示例代码来处理封闭源共享库,如下所示:
// Header
#define MAX_PARAM_NAME 10
int foo(..., char **ParNameList, ...);
// Main
char *ParNameList = (char *)NULL;
ret = foo(..., &ParNameList,...);
par = (char (*)[MAX_PARAM_NAME])ParNameList;
应该如何在ctypes中处理它?
有问题的部分是在函数声明中应该使用foo(..., char **ParNameList, ...);a char **,但char *实际上是在函数调用中给出了对它的引用。
到目前为止,我有:
from ctypes import *
so = cdll.LoadLibrary(...)
so.foo.argtypes = [
...
POINTER(POINTER(c_char)), # ParNameList
...
]
so.foo.restype = c_int
#...
ParNameList = POINTER(c_char)()
so.foo(..., ParNameList ,...)
这给了我一个垃圾字符串,我在其中看到所需的输出与随机变化的RAM位交错。
但是(char (*)[MAX_PARAM_NAME])强制转换在ctypes中如何工作?
如果整个事情有更直接的方法,我将不胜感激。
暮色呼如
相关分类