我想写一个随机输出,其中STD_OUTPUT_FILE
可以。我想用
WriteFile
,但它似乎没有写任何东西。
HANDLE outH = GetStdHandle ( STD_OUTPUT_HANDLE );
WriteFile( outH,param, strlen ( param ), &written_b, NULL );
答案 0 :(得分:0)
我解决了。
重定向标准输出时出现错误,当它应该让它成为现实时,它出错了。还不知道。我会更新我的答案。
答案 1 :(得分:0)
您的代码缺少任何形式的错误检查。这对于从网站或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;
}
现在,如果出现问题,我们不仅会知道,而且我们会知道为什么。
好的,因为当我在计算机上运行此代码时,它运行得很好。因此,问题在于您的应用程序中我们未见过的一些代码。错误处理代码将帮助将其清除。
答案 2 :(得分:0)
要使用调用窗口/控制台写入STDOUT,您需要将生成的可执行文件链接到控制台子系统。
LINK.exe / EDIT / SUBSYSTEM:CONSOLE {您的exe名称}
这适用于较旧的VB6环境,我假设同样的可执行标志也适用于Visual C.