I want to call a c function in python code, and pass in a python dictionary as an argument.
little.c
#include <Python.h>
#include <stdio.h>
#include <stdlib.h>
PyObject *changeDict(PyObject *dict){
if(PyDict_Check(dict) == 1){
system("echo '==== is a dict ====' | systemd-cat -t 'little.c'");
}
// modify some value
return dict;
}
I use these commands to compile little.c:
gcc -g -fPIC -c little.c -I/usr/include/python2.7 -lpython2.7
gcc -shared little.o -o little.so
and move to LD_LIBRARY_PATH
mv little.so /usr/lib
little.py
from ctypes import *
mydll = PyDLL("little.so")
dic = {"status": 0}
dic = mydll.changeDict(dic)
print(dic)
python little.py
Then I got this error:
Traceback (most recent call last): File "little.py", line 13, in <module> dic = mydll.changeDict(dic) ctypes.ArgumentError: argument 1: <type 'exceptions.TypeError'>: Don't know how to convert parameter 1
Is it possible to pass a python dictionary directly to a C function?