我想从 C 调用一个在 Python 模块中定义的自定义函数。我有一些初步代码可以做到这一点,但它只是将输出打印到标准输出。
我的测试.py
import math
def myabs(x):
return math.fabs(x)
测试.cpp
#include <Python.h>
int main() {
Py_Initialize();
PyRun_SimpleString("import sys; sys.path.append('.')");
PyRun_SimpleString("import mytest;");
PyRun_SimpleString("print mytest.myabs(2.0)");
Py_Finalize();
return 0;
}
如何将返回值提取到 C double
并在 C 中使用它?
原文由 D R 发布,翻译遵循 CC BY-SA 4.0 许可协议
如前所述,使用 PyRun_SimpleString 似乎不是一个好主意。
您绝对应该使用 C-API ( http://docs.python.org/c-api/ ) 提供的方法。
阅读介绍是了解其工作方式的第一件事。
首先,您必须了解作为 C API 的基本对象的 PyObject。它可以表示任何类型的 Python 基本类型(字符串、浮点数、整数、…)。
存在许多函数可以将例如 python 字符串转换为 char* 或 PyFloat 转换为 double。
首先,导入您的模块:
然后获取对您的函数的引用:
然后得到你的结果:
并回到 double :
您显然应该检查错误(参见 Mark Tolonen 给出的链接)。
如果您有任何问题,请不要犹豫。祝你好运。