我的C库中有两个函数:
void passBytes(char *data, int size);
void returnBytes(char **data, int *size); //dynamically allocates
我使用这篇文章成功地实现了第一个函数的包装器:
%typemap(in) (char *data, int size) {
Py_ssize_t len;
PyBytes_AsStringAndSize($input, &$1, &len);
$2 = (int)len;
}
但是不知道如何用类型映射实现第二个包装器。无法使用SWIG_PYTHON_STRICT_BYTE_CHAR
,因为我需要混合使用str
和bytes
。
您已接近
%typemap(in, numinputs=0) (char **data) (char *temp) {
$1 = &temp;
}
%typemap(argout) (char **data) {
if (*$1) {
$result = PyUnicode_FromString(*$1);
free(*$1);
}
}
请注意,这两种类型映射结合在一起就可以完成任务。如果字符数组以null结尾,则不需要长度。创建参数temp
,并将其引用传递给分配数组的C函数。