您可能需要對類型映射進行一些操作。
%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時將dict
轉變爲一個env_t **
。
這是一個很好的問題,但是(a)請改進格式,(b)請回到以前的問題並接受答案,以鼓勵人們回答這個問題。 – 2012-04-10 04:00:51
我已經這麼做了。 ' – 2012-04-10 04:05:28