SWIG返回字节,而不是具有typemap的字符串



我的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,因为我需要混合使用strbytes

您已接近

%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函数。

最新更新