Re: [问题] c调用py产生的exe有办法包入py档吗?

楼主: LiloHuang (十年一刻)   2015-02-14 19:25:15
步骤一:建立一个 Console-based 的 VC 专案
主程式内容大概如下,不保证完全符合需求或者可以运作
请依照自己的需求进行修改...
#include <Windows.h>
#include <Python.h>
#include <marshal.h>
#include "resource.h"
int main() {
HRSRC res = FindResource(NULL, MAKEINTRESOURCE(IDR_PYTHON1), TEXT("PYTHON"));
if (!res) return -1;
HGLOBAL handle = LoadResource(NULL, res);
if (!handle) return -1;
char *ptr = (char *)LockResource(handle);
size_t size = SizeofResource(NULL, res);
if (!ptr || size < 8) return -1;
Py_Initialize();
PyObject *code_object = NULL;
PyObject *module = NULL;
do {
code_object = PyMarshal_ReadObjectFromString(ptr + 8, size - 8);
if (!code_object) break;
module = PyImport_ExecCodeModule("test.pyc", code_object);
if (!module) break;
if (PyObject_HasAttrString(module, "foobar")) {
printf("great!\n");
}
} while (0);
Py_XDECREF(module);
Py_XDECREF(code_object);
Py_Finalize();
return 0;
}
步骤二:产生 .pyc 档案
编译 .py 成 .pyc 的方式是 python -m py_compile test.py
步骤三:加入 .pyc 资源档
透过 VC 资源档建立新的自订资源项目,假设命名为 PYTHON
加入资源的方式有点类似此教学,http://goo.gl/yHFN0R
但是请务必透过 [自订] 按钮,而不是选择已知的资源类型
再把稍早编译好的 test.pyc 摆到 Resource.rc 同一层目录后
用记事本打开 Resource.rc 档案,把新增的自订资源项目改成
IDR_PYTHON1 PYTHON "test.pyc"
完成以上动作就可以了,有问题请推文我会尽量回应。
作者: xtxml (赤木巧☠)   2015-02-16 09:57:00
推分享,最近工作刚好碰到类似的问题,这招很有帮助

Links booklink

Contact Us: admin [ a t ] ucptt.com