【问题标题】:Dynamically loading a python module from a DLL with Boost.Python使用 Boost.Python 从 DLL 动态加载 python 模块
【发布时间】:2012-05-08 07:53:36
【问题描述】:

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

所以,DLL X 调用 Python 代码,Python 代码导入同样位于 DLL X 中的模块 Y。

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 这看起来很完美,谢谢。一旦我有时间尝试一下,我会回来报告。
    猜你喜欢
    • 2021-08-06
    • 2010-10-20
    • 2010-10-31
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    相关资源
    最近更新 更多