Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中调用从Python接收函数指针的函数_Python_C_Swig - Fatal编程技术网

在C中调用从Python接收函数指针的函数

在C中调用从Python接收函数指针的函数,python,c,swig,Python,C,Swig,我正在使用Swig从C源代码生成一个python库。 有一个函数接收指向C语言中函数的指针。我需要从Python调用它,但回调函数必须是Python语言。 我看到的所有文档都使用C中的回调函数 例如: typedef double (*FeeCalculator)(Transaction* p); void dealTransaction(Transaction* t, FeeCalculator feeCalculator); 我希望该函数在Python中可用。比如: def myFeeC

我正在使用Swig从C源代码生成一个python库。 有一个函数接收指向C语言中函数的指针。我需要从Python调用它,但回调函数必须是Python语言。 我看到的所有文档都使用C中的回调函数

例如:

typedef double (*FeeCalculator)(Transaction* p);

void dealTransaction(Transaction* t, FeeCalculator feeCalculator);
我希望该函数在Python中可用。比如:

def myFeeCalculator(tran):
    return trans.Sum * 0.1

def main():
   t = Transaction()
   dealTransaction(t, myFeeCalculator)
谢谢柔印。 这就是我所做的:

这就是我最后做的:

Swig:

C:

来自Python的调用:

import myLib

def myFeeCalculator(tran):
    return trans.Sum * 0.1

def main():
   t = Transaction()
   myLib.dealTransaction(t, myFeeCalculator)

你能提供一个吗?谢谢,我增加了一个例子。即使大多数代码是用C编写的,你能只为Python包装写一些C++吗?胶水可以稍微简化一点C++。
void dealTransaction(Transaction* t, FeeCalculatorCallbackAndContext* feeCalculator){
    feeCalculator->callback(t, feeCalculator->context);
}
import myLib

def myFeeCalculator(tran):
    return trans.Sum * 0.1

def main():
   t = Transaction()
   myLib.dealTransaction(t, myFeeCalculator)