python怎样嵌入一个Windows程序?

python怎样嵌入一个Windows程序?

在 Windows 应用程序中嵌入 Python 解释器可以总结如下:

  1. 请 _不要_ 直接在你的 .exe 文件中内置 Python 。在 Windows 上, Python 必须是一个 DLL ,这样才可以处理导入的本身就是 DLL 的模块。(这是第一个未记录的关键事实。)相反,链接到 pythonNN.dll ;它通常安装在 C:WindowsSystem 中。 NN 是 Python 版本,如数字“33”代表 Python 3.3 。

    你可以通过两种不同的方式链接到 Python 。加载时链接意味着链接到 pythonNN.lib ,而运行时链接意味着链接 pythonNN.dll 。(一般说明: python NN.lib 是所谓的“import lib”,对应于 pythonNN.dll 。它只定义了链接器的符号。)

    运行时链接极大地简化了链接选项,一切都在运行时发生。你的代码必须使用 Windows 的 LoadLibraryEx() 程序加载 pythonNN.dll 。代码还必须使用使用 Windows 的 GetProcAddress() 例程获得的指针访问 pythonNN.dll 中程序和数据(即 Python 的 C API )。宏可以使这些指针对任何调用 Python C API 中的例程的 C 代码都是透明的。

    Borland 提示:首先使用 Coff2Omf.exe 将 pythonNN.lib 转换为 OMF 格式。

  2. 如果你使用 SWIG ,很容易创建一个 Python “扩展模块”,它将使应用程序的数据和方法可供 Python 使用。SWIG将为你处理所有蹩脚的细节。结果是你将链接到 .exe 文件 的C代码 (!) 你不必创建 DLL 文件,这也简化了链接。

  3. SWIG 将创建一个 init 函数(一个 C 函数),其名称取决于扩展模块的名称。例如,如果模块的名称是 leo ,则 init 函数将被称为 initleo() 。 如果您使用 SWIG 阴影类,则 init 函数将被称为 initleoc() 。这初始化了一个由阴影类使用的隐藏辅助类。

    你可以将步骤 2 中的 C 代码链接到 .exe 文件的原因是调用初始化函数等同于将模块导入 Python ! (这是第二个关键的未记载事实。)

  4. 简而言之,你可以用以下代码使用扩展模块初始化 Python 解释器。

    #include "python.h"
    ...
    Py_Initialize();  // Initialize Python.
    initmyAppc();  // Initialize (import) the helper class.
    PyRun_SimpleString("import myApp");  // Import the shadow class.
    
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » python怎样嵌入一个Windows程序?