想模仿mfc trace调试程序,尝试用命名管道,程序调用_trace,然后在另一端的控制台进程中显示管道报文。代码如下:
void _trace(int id, char *format, ...)
{
    HANDLE hPipe;
    char pipename[30];
    char buf[1024];
    long len, writes;
    va_list pArgList;     //创建命名管道,单向,阻塞,报文式
    sprintf(pipename, "\\\\.\\Pipe\\_trace_pipe_%d", id);
    hPipe = CreateNamedPipe(pipename, PIPE_ACCESS_OUTBOUND, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, 0, 0, 1000, NULL);
    //GetLastError();
    if (hPipe == INVALID_HANDLE_VALUE)
    {
        MessageBox(NULL, "创建管道失败!", NULL, MB_ICONINFORMATION);
        return;
    }    //向命名管道写入数据
    va_start(pArgList, format);
    len = vsprintf(buf, format, pArgList);
    va_end(pArgList);    if (!WriteFile(hPipe, buf, len, &writes, NULL))
    {
        MessageBox(NULL, "向管道写入数据失败!", NULL, MB_ICONINFORMATION);
    }
}之前没用过管道,结果发现管道写入失败,GetLastError显示:0x00000218 等候打开管道另一端的进程。必须先连接,才能使用。这样管道就行不通了。应该用什么内核对象呢?谢谢!