gpt4 book ai didi

python - 为什么在 Sublime Text 下写入 STD_OUTPUT_HANDLE 会崩溃?

转载 作者:行者123 更新时间:2023-11-30 22:46:56 28 4
gpt4 key购买 nike

我有一个应用程序,它恰好使用 winapi 的 WriteFile 在从 GetStdHandle 获取的句柄上登录到控制台。最小测试用例:

#include <Windows.h>

int main(int argc, char** argv) {
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
if(GetFileType(console) == FILE_TYPE_UNKNOWN)
return;
WriteFile(console, "abc", 3, 0, 0);
}

使用 VS2013 中的默认选项构建。当在标准 Windows 控制台上调用以及使用例如从 python2/python3/Sublime 的控制台调用时,这可以正常工作。 subprocess.Popen('/path/to/my.exe') .

现在我想在 SublimeText 3 中将该程序作为构建系统运行。这是构建定义:

{
"cmd": [ "/path/to/my.exe" ]
}

根据documentation这应该相当于使用 subprocess.Popen。然而,当我调用这个“构建系统”时,Sublime 的输出 Pane 显示 abc然后对 WriteFile 的调用崩溃了

0xC0000005: Access violation writing location 0x00000000.

这里发生了什么?这是我的代码、Sublime 或 WriteFile 中的问题吗?有什么可以做的吗? (我尝试使用 shell_cmd 而不是 cmd 但这没有什么区别)

最佳答案

您向 WriteFile 传递了错误的参数:

lpNumberOfBytesWritten [out, optional]
This parameter can be NULL only when the lpOverlapped parameter is not NULL.

对于同步调用 WriteFile,您必须将有效的指针传递给 DWORD,其中返回写入的字节数:

#include <Windows.h>

int main(int argc, char** argv) {
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
if(GetFileType(console) == FILE_TYPE_UNKNOWN)
return;
DWORD dwBytesWritten{};
WriteFile(console, "abc", 3, &dwBytesWritten, 0);
}

关于python - 为什么在 Sublime Text 下写入 STD_OUTPUT_HANDLE 会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40719283/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com