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

Dynamically loading a python module from a DLL with Boost.Python

本文关键字:加载 python 模块 动态 DLL Boost Python 使用      更新时间:2023-10-16

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

所以,DLL X 调用 Python 代码,Python 代码导入模块 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之前调用该函数,使用要导入的模块的名称和指向 init 函数的指针,它们将可供嵌入式代码使用,就好像它们是内置模块一样(它们仍然必须导入)。

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