Python在主机程序初始化后连接到C++ dll?
Posted
技术标签:
【中文标题】Python在主机程序初始化后连接到C++ dll?【英文标题】:Python connect to a C++ dll after it's initialized by a host program? 【发布时间】:2013-08-27 18:40:26 【问题描述】:宿主程序支持 C++ 插件。 C++ dll 是作为其插件编写的。该插件将在启动时由主机程序初始化。在主机初始化之后,有什么方法可以使用 Python 附加到 C++ dll? 其目的是将所有繁重的工作都交给 Python,因为它是一种熟悉的语言。
根据我的搜索,有ctypes,ctypes可以实现吗?还是我必须在 C++ dll 中嵌入一个 python 解释器?
【问题讨论】:
像连接任何其他应用程序、IPC...tcp、本地共享内存、管道等一样连接到 c++ dll... 有没有办法将 C++ dll 暴露给 python,从而减少通信开销?我猜“连接”太笼统了。ctypes
允许 Python 加载 DLL 并调用函数。如果目标是在 Python 中实现大部分插件功能,那么要么在插件中嵌入 Python 解释器,要么通过 IPC 与外部解释器通信。
你可以直接用ctypes
加载一个DLL。不过,这不是您所要求的,您希望在已被另一个程序加载后直接访问 c++ 函数。做到这一点的唯一方法是有某种 IPC 设置通过您的主机应用程序与您的 DLL 来回通信。
你说的这个host是什么?它是不是像 Java JNI 调用那样广为人知?
【参考方案1】:
您可以创建一个 C++ 插件,然后使用 boost::python 将功能委托给您的 Python 代码(嵌入在插件中或文件系统中)。
但无论如何,您都必须编写大量 C++ 代码。而且调试起来并不容易。您必须将 C++ 与 Python 内存管理与您的插件架构使用的内存管理桥接起来。
还不如硬着头皮用C++写插件。社区支持也是需要考虑的事情。您可能不想成为唯一使用这种架构的人。
【讨论】:
以上是关于Python在主机程序初始化后连接到C++ dll?的主要内容,如果未能解决你的问题,请参考以下文章
Quickblox iOS:在应用程序处于后台错误后连接到 QBChat