c++ - 使用 Boost.Python 从 DLL 动态加载 python 模块

标签 c++ python boost-python python-module python-c-api

我有一个用 C++ 编写的 DLL,它使用 Boost.Python 来运行 Python 代码。 Python 代码应该能够与实际应用程序(在 DLL 中)进行交互。 是否可以将两者都放在一个图书馆中,还是我需要将两者分开?

因此,DLL X 调用 Python 代码,Python 代码导入模块 Y,该模块 Y 也位于 DLL X 中。

是否可以使用 Python C API 或(最好)Boost.Python?像 load_python_module("test", my_dll_handle)...

我看到 DLL 导出 PyInit_test,但我不知道只调用它是否是个好主意,我什至不知道它需要什么参数。

最佳答案

Python C-API 文档强烈暗示这是可能的(尽管我自己从未尝试过),使用 Python C-API PyImport_AppendInittab功能。您在 Py_Initialize 之前使用要导入的模块的名称和指向初始化函数的指针调用该函数,它们将可用于嵌入式代码,就好像它们是内置的一样模块(它们仍然需要导入)。

因为 BOOST_PYTHON_MODULE(foo) 宏只是创建了一个 initfoo() 函数,所以您应该也可以在 Boost.Python 中使用此方法。

关于c++ - 使用 Boost.Python 从 DLL 动态加载 python 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10352786/

相关文章:

c++ - 密码的隐形输入?

python - 从十进制中删除尾随零

c++ - 与 boost::python 并行运行两个 python 脚本

python - 编译 boost 时的地址模型错误

c++ - 将一段 C++ 代码包装成 Python

c++ - 跟踪专用模板对象的枚举成员值

javascript - 后端带有 C++ 类的 Electron nodejs

c++ - 设置控制台光标和字体颜色

python - 如何将一个字符串的前两个字母与第二个字符串的前两个字母交换?

python - 来自 Python 的 HTML 片段