CFFI官方文档地址:
https://cffi.readthedocs.io/en/latest/
环境:win10 - 64位 + python 3.6 - 64位 + dll - 64位
callbakc.cpp ( 生成dll)
#include "stdafx.h"
#include <stdio.h>
#ifndef DLL_API
#define DLL_API __declspec(dllexport)
#endif
extern "C"{
DLL_API void call_callback1(int(*func1)(int)) {
printf("callback1 begin to work..\n");
int a = func1(3252);
printf("a = %d\n", a);
printf("callback1 end to work..\n");
}
}
callback.py
from cffi import FFI
ffi = FFI()
ffi.cdef('''
void inerchange(int * num);
void call_callback1(int(*func1)(int));
void call_callback2(void(*func2)(int *));
''')
libdll = ffi.dlopen("callbakcdll.dll")
@ffi.callback("int(int)")
def set_struct(x):
x = x + 1
print("set_struct: ", x)
return x
libdll.call_callback1(set_struct)
输出:
注意事项:
(1)dll 版本和 python版本要对应