我试图找出如何调整此示例以便redirect the output of a console window到另一个进程内的文本框。
不幸的是,似乎读者永远不会收到任何意见。
进一步调试显示对SetHandleInformation
的调用始终以Error 6: Invalid Handle
中止。 hPipeOutRd
的值看起来不错,就像0x00000244。
这再现了这个问题:
int main(int argc, char *argv[])
{
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
int result = 0;
HANDLE hPipeOutRd = INVALID_HANDLE_VALUE; // This end is passed to the pipe reader
HANDLE hPipeOutWr = INVALID_HANDLE_VALUE; // This end is passed to the child process
if ( result == 0 && !::CreatePipe( &hPipeOutRd, &hPipeOutWr, &sa, 4096 ) )
{
result = -1;
printf("Error: %u\r\n", GetLastError() );
}
if ( result == 0 && !::SetHandleInformation( &hPipeOutRd, HANDLE_FLAG_INHERIT, 0 ) ) // This fails with invalid handle
{
result = -1;
printf("Error: %u\r\n", GetLastError() );
}
return result;
}
任何想法为什么?
答案 0 :(得分:2)
HANDLE已经是一个指针。除非是out参数,否则你不会接受它的地址。
只需带上&超出你的SetHandleInformation调用。