2015-03-30 2 views
1

Итак, у меня есть C код:PyObject_Str на ctypes выдаёт ошибку сегментации прошел словарь

#include "Python.h" 

void check(PyObject* pdict) 
{ 
    printf("About to instantiate PyString!\n"); 
    PyObject* mdstr = PyObject_Str(pdict); 
    printf("Python dict: %s\n", PyString_AsString(mdstr)); 
} 

Что я могу собрать и ссылку в разделяемую библиотеку с именем «libTmp.so»

Затем я использую это фрагмент кода ctypes для вызова функции «проверить»:

from ctypes import cdll, py_object, CFUNCTYPE, POINTER 
SO = cdll.LoadLibrary("libTmp.so") 
prototype = CFUNCTYPE(py_object, py_object) 
check = prototype(('check',SO)) 

Но когда я пытаюсь вызвать функцию «проверить» я получаю Segfault от линии:

PyObject* mdstr = PyObject_Str(pdict); 

чек ({ «один»: 1}), например, будет ... сегментации

Я подозреваю, что это либо недоразумение надлежащего случая использования с моей стороны или, возможно, вопрос юникода?

Любые идеи будут оценены.

Благодаря

ответ

Смежные вопросы