带指针的回调函数

时间:2018-06-22 15:00:35

标签: python c python-2.7

我正在使用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)]

0 个答案:

没有答案