This is my problem, I have a legacy library (.so) written in C with APIs like this:
typedef void (*CALLBACK)( void);
typedef CALLBACK CALLBACK_TBL[ 5 ];
void init(CALLBACK_TBL callbackTbl)
{
T_MYCALLBACK *myCallback1 = (T_MYCALLBACK *)(callbackTbl[0]);
if (myCallback1 )
{
myCallback1(2,3);
}
}
Of course, because it is a legacy library, I cannot change the API signature.
Now From Python, I am trying to call init with callback defined into python:
CallbackType1 = ctypes.CFUNCTYPE(None, c_ulong, c_ulong)
CallbackType2 = ctypes.CFUNCTYPE(None, c_ubyte, c_ubyte)
...
CallbackType5 = ctypes.CFUNCTYPE(None, c_int32, c_int32)
def callback1(long1, long2):
print("callback1")
def callback2(bool1, bool2):
print("callback2")
...
def callback5(int1, int2):
print("callback5")
But I am not able to understand how am I supposed to make such an array of callbacks:
_callback1 = CallbackType1(callback1)
_callback2 = CallbackType1(callback2)
...
_callback5 = CallbackType1(callback5)
lib = CDLL("lib.so")
lib.init(....) ?????
Does somebody have an idea ?