我想写入一个随机输出,其中STD_OUTPUT_FILE
可以。我想使用
WriteFile
,但它似乎没有写任何东西。
HANDLE outH = GetStdHandle ( STD_OUTPUT_HANDLE );
WriteFile( outH,param, strlen ( param ), &written_b, NULL );
要使用调用窗口/控制台写入 STDOUT,您需要将生成的可执行文件链接到控制台子系统。
LINK.exe /EDIT /SUBSYSTEM:CONSOLE {你的 exe 名称在这里}
这适用于较旧的 VB6 环境,我假设相同的可执行标志也适用于 Visual C。
我解决了。
重定向标准输出时出错,当它应该让它保持原样时,它做错了什么。还不知道。我会更新我的答案。
您的代码缺少任何形式的错误检查。这对于从网站复制的代码或 Stack Overflow 答案很常见,为了清晰和简洁,通常会省略错误检查。但是任何时候你自己编写代码,你绝对必须假设它可能会失败并编写代码来处理这种情况。在这里,您知道它失败了,但您仍然没有返回添加错误检查代码以查看失败发生的位置。
现在让我们添加错误检查代码,必要时参考 SDK 文档,了解您调用的 API 函数如何处理错误情况:
static void ReportError(const TCHAR* errorMsg)
{
MessageBox(NULL, errorMsg, NULL, MB_OK | MB_ICONERROR);
}
int _tmain(int argc, TCHAR* argv[])
{
char param[] = "This is some output.";
DWORD written_b;
HANDLE outH = GetStdHandle(STD_OUTPUT_HANDLE);
if (!outH)
{
ReportError(TEXT("No standard handles associated with this app."));
}
else if (outH == INVALID_HANDLE_VALUE)
{
TCHAR errMsg[100];
wsprintf(errMsg, TEXT("GetStdHandle() failed with error code %lu"), GetLastError());
ReportError(errMsg);
}
else
{
if (!WriteFile(outH, param, strlen(param), &written_b, NULL))
{
TCHAR errMsg[100];
wsprintf(errMsg, TEXT("WriteFile() failed with error code %lu"), GetLastError());
ReportError(errMsg);
}
}
return 0;
}
现在,如果出现问题,我们不仅会知道,还会知道原因。
好东西,因为当我在我的计算机上运行这段代码时,它工作得很好。因此,问题出在您的应用程序的其他地方,在一些我们没有看到的代码中。错误处理代码将有助于清除它。