gpt4 book ai didi

python - SWIG、Python 和指针

转载 作者:太空宇宙 更新时间:2023-11-03 11:56:02 26 4
gpt4 key购买 nike

我正在尝试包装源代码不可用的 C API(静态库)。使用 API 的首要任务之一是设置环境结构。

env_t * my_env = NULL;
result = env_setup(&my_env);

有声明

error_code env_setup(env_t ** env);

考虑到 env 结构的布局是隐藏的,是否甚至可以在 SWIG 中制造这种类型的指针 (env_t **)?

最佳答案

您可能需要对类型映射进行一些操作。

%typemap(in) env_t ** (env_t *temp) %{
temp = env_alloc();
PyObject *iter = PyObject_GetIter($input);
for (PyObject *item; (item = PyIter_Next(it));) {
PyObject *key = PyObject_Str(item);
PyObject *val = PyObject_GetItem($input, key);
env_set(temp, PyString_AsString(key), PyString_AsString(val), ENV_OVERRIDE);
Py_DECREF(val);
Py_DECREF(key);
Py_DECREF(item);
}
Py_DECREF(iter);
$1 = &temp;
%}
%typemap(argout) env_t** %{
PyObject *o = PyDict_New();
for (char **val = env_array(*$1); *val; val++) {
char *eq = strchr(*val, '=');
*eq = '\0';
PyMapping_SetItemString(o, *val, eq + 1);
}
env_free(*$1);
$result = SWIG_Python_AppendOutput($result, o);
%}

完全未经测试且缺乏错误处理,但这里的目的是在从 Python 调用到 C 以及从 env_t **dict 当从 C 返回到 Python 时。

关于python - SWIG、Python 和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10082767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com