We have a python program that by means of ctypes calls several functions of a C dll.
1) In the first version of this program all works right:
1.a)C function declarations are :
kernell occurs on the sentence that is indicated (that has not changed on the dll and before it worked
fine) :
Thae change on "functions_dispacher" is the only change in the dll. All the other functions remain
unchanged.
2.a) New C function declarations are :
this is what has changed, but I do not know how can I debug this and find the problem.
Besides, I think the python code is right, but it should not be.
The python program is executed from spyder on a Windows PC. Could this be a spyder/anaconda bug?
I think not, that the problem is in the python program.
Any help is appreciated.
1) In the first version of this program all works right:
1.a)C function declarations are :
// Callback functions: typedef void (*function_1) (int i); typedef void (*function_2) (char* s); int functions_dispacher(function1 f1, function2 f2); // Functions: int function_4 (int i, char* s);1.b)Python program is (works right) :
dll_lib=cdll.LoadLibrary("dll_file_name")
# Callback functions:
def callback1(i):
# Process i value
return ()
def callback2(s):
# Process s value
return ()
pyf1 = CFUNCTYPE(c_int)
cb1 = pyf1(callback_1)
pyf2 = CFUNCTYPE(c_char_p)
cb2 = pyf2(callback_2)
f3 = dll_lib.functions_dispacher
f3.argtypes = [pyf1, pyf2]
f3.restype = int
return_code_3 = f3(cb1, cb2)
# Functions:
int_value = 5
str_value = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
f4 = dll_lib.function_1
f4.argtypes = [c_int,c_char_p]
f4.restype = int
return_code_4 = f4(int_value, str_value)2) If we modify the function "functions_dispacher". when we run the python program, a crash of the python kernell occurs on the sentence that is indicated (that has not changed on the dll and before it worked
fine) :
Thae change on "functions_dispacher" is the only change in the dll. All the other functions remain
unchanged.
2.a) New C function declarations are :
// Callback funtions:
typedef void (*function_1) (int i);
typedef void (*function_2) (char* s);
typedef struct
{
function_1 f1;
function_2 f2;
}s_func;
int functions_dispacher(s_func f);
// Functions:
int function_4 (int i, char* s);2.b)New python program is (python kernel crash) : dll_lib=cdll.LoadLibrary("dll_file_name")
# Callback funtions:
def callback1(i):
# Process i value
return ()
def callback2(s):
# Process s value
return ()
class s_func(Structure):
_fields_ = [("f1", CFUNCTYPE(c_int)),
("f2", CFUNCTYPE(c_char_p))]
struc_func = s_func()
pyf1 = CFUNCTYPE(c_int)
cb1 = pyf1(callback_1)
pyf2 = CFUNCTYPE(c_char_p)
cb2 = pyf2(callback_2)
struc_func.f1 = callback1
struc_func.f2 = callback2
f3 = dll_lib.functions_dispacher
f3.argtypes = [s_func]
f3.restype = int
return_code_3 = f3(struc_func)
# Functions:
int_value = 5
str_value = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
f4 = dll_lib.function_4
f4.argtypes = [c_int,c_char_p]
f4.restype = int
# ON THE NEXT SENTENCE, PYTHON KERNEL CRASH
return_code_4 = f4(int_value, str_value)I think the problem should be in process of calling the function "functions_dispacher" from python, becausethis is what has changed, but I do not know how can I debug this and find the problem.
Besides, I think the python code is right, but it should not be.
The python program is executed from spyder on a Windows PC. Could this be a spyder/anaconda bug?
I think not, that the problem is in the python program.
Any help is appreciated.
