Por que o WriteFile falha ao gravar na saída padrão?
Aqui está um programa "Hello world" que usa o WriteFile do WinAPI (compilado no Microsoft Visual C ++ 2008 Express):
int _tmain(int argc, _TCHAR* argv[])
{
wchar_t str[] = L"Hello world";
HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
if(out && out!=INVALID_HANDLE_VALUE)
{
WriteFile(out, str, sizeof(str), NULL, NULL);
CloseHandle(out);
}
return 0;
}
Se executado em uma janela de console, ele cumprimenta alegremente o mundo. Se você tentar redirecionar sua saída padrão, no entanto, como em
hello.exe > output.txt
o programa falha no WriteFile (exceção do ponteiro NULL). No entanto, o output.txt existe e contém a saída correta na sua totalidad
A pilha de chamadas em caso de falha:
KernelBase.dll!_WriteFile@20() + 0x75 bytes
kernel32.dll!_WriteFileImplementation@20() + 0x4e bytes
srgprc2.exe!wmain(int argc=1, wchar_t * * argv=0x00483d88) Line 15 + 0x16 bytes C++
A mensagem: "Exceção não tratada em 0x75ce85ea (KernelBase.dll) no srgprc2.exe: 0xC0000005: local de gravação da violação de acesso 0x00000000."
O que está acontecendo aqui? Obrigado