我正在使用C语言编写的库,该库将回调作为参数使用,请参见以下超级简单的示例:
#include <stdio.h>
#include <stdlib.h>
#include "axgmb.h"
void callback(interrupt_handler pointer) {
printf("*****[APP]%lx , %lx\n", pointer.data, pointer.value);
}
int main(void)
{
AXGMB_DIO_Open();
AXGMB_DIO_interruptHandler(callback);
sleep(1);
AXGMB_DIO_Close();
return ERR_Success;
};
interrupt_handler是这样的结构:
typedef struct interrupt_handler{
unsigned long
unsigned long
unsigned long
unsigned long
}interrupt_handler;
我正在尝试将其与Python 2.7一起使用,到目前为止,我编写了以下代码:
mydll = windll.LoadLibrary("AGP2_API.dll")
@c.CFUNCTYPE(None, c.c_char_p)
def callBackTest(a):
print("Test call back "+str(a))
iRet=mydll.AXGMB_DIO_Open()
mydll.AXGMB_DIO_interruptHandler(callBackTest)
time.sleep(10)
mydll.AXGMB_DIO_Close()
在正确调用该回调的意义上说,它可以正常工作,但是我无法获取所需的正确数据,所以我只写了str(a)看看是否有问题。 我必须使用struct来读取数据,但是我不知道,我想出了类似的方法但不确定,也不确定如何使用它:
class testStruct(Structure):
_fields_ = [('val1', c_longdouble),
('val2', c_longdouble),
('val3', c_longdouble),
('val4', c_longdouble)]