我试图在用C ++编写的DLL中注册Python函数进行回调,但我无法弄清楚如何去做。
我的C ++代码标题如下:
extern "C" {
__declspec(dllexport) void RegisterFunc((void (*)());
}
实施是:
void (*funcCallback)() = NULL;
__declspec(dllimport) void RegisterFunc(void(*func)())
{
funcCallback = func;
}
我的Cython pyx文件如下:
cdef extern void RegisterFunc(void (*)())
def PyRegisterFunc(func):
RegisterFunc(func)
编译时会显示错误消息: 无法将Python对象转换为' void(*)(void)'
如果我将代码更改为:
def PyRegisterFunc(func):
RegisterFunc(<void (*)()>func)
我收到错误消息: Python对象不能转换为基本类型的指针
我还尝试了&amp; func并收到错误消息:无法获取Python变量的地址。
将此Python函数作为指向C代码的指针传递的正确方法是什么?
更新:我应该提到这个Python函数的预期目的。 Python应用程序是用PyQt编写的,函数会发出一个信号。 DLL本身不知道Qt,并且在没有Qt库的情况下编译。 DLL中的方法将间接调用此函数,该函数将向Python应用程序发出信号。