Py_Main()似乎是一个NOOP

时间:2017-08-10 06:24:09

标签: python c++ c windows

我正在使用Python 3.6开发Windows。我正在尝试制作一个wWinMain()GUI 使用嵌入式python解释器的应用程序。我有各种各样的 无法加载扩展模块的问题,但我不会进入 现在因为我已将我的问题跟踪到更简单的测试用例。

首先,请考虑pythonw.exe的源代码:

/* Minimal main program -- everything is loaded from the library. */

#include "Python.h"

#define WIN32_LEAN_AND_MEAN
#include <windows.h>

int WINAPI wWinMain(
    HINSTANCE hInstance,      /* handle to current instance */
    HINSTANCE hPrevInstance,  /* handle to previous instance */
    LPWSTR lpCmdLine,         /* pointer to command line */
    int nCmdShow              /* show state of window */
)
{
    return Py_Main(__argc, __wargv);
}

现在考虑一个简单的python脚本,我将其保存在source.py

f = open('C:\\Users\\rutski\\Desktop\\hello.txt', 'w')
f.write('Hello World!\n')
f.flush()
f.close()

并使用

运行
> pythonw.exe source.py

这将生成具有预期输出的文件hello.txt。现在我创建一个 新的Visual Studio解决方案。我制作Win32项目,选择“Windows 应用程序“和”空项目。“我创建了一个新的源文件main.c和我 复制粘贴pythonw的源代码(使用Py_Main和所有这些)。现在我 添加以下设置:

C:\Users\rutski\Documents\python\PCbuild\amd64 --- Library Search Directory
C:\Users\rutski\Documents\python\Include       --- Include Directory
C:\Users\rutski\Documents\python\PC            --- Include Directory (for pyconfig.h)

我选择“Debug | x64”并点击构建。我弹出cmd.exe,浏览到哪里 mything.exe是,并执行

> mything.exe source.py

但这次没有任何反应。没有创建hello.txt。我没有崩溃 窗口或错误消息。我不会被抛入调试器。我没有 结果。我在这里或某些地方遗漏了一些构建标志吗?

我正在运行完全与pythonw.exe相同的C代码,但我的不是 工作。是什么给了什么?

我甚至无法让Py_Main()从我的内部执行一些python代码 自己的应用程序,所以试图编写我自己的嵌入代码基本上是没有希望的。

1 个答案:

答案 0 :(得分:0)

你叫什么主要功能? “主要”? WinMain函数?该计划需要一个切入点。

要查看发生了什么,请在调试器中运行该程序并尝试逐步执行。我怀疑它可能没有达到你的“主要”功能。

如果您使用的是main,请尝试使用WinMain。

或者,不要将项目创建为空应用程序,而应创建具有应用程序骨架的应用程序。

您使用它的方式,最好的选择可能是让向导为您创建一个控制台应用程序。

如果您获得了一个小型应用程序,它可以编译并运行并且不执行任何操作,但具有正确的入口点,并且您在那里添加了代码,那么您可能会获得更多成功。

如果您特别想使用“main”,并且创建控制台应用程序不是一个充分的解决方案,那么this link可能有帮助。