想模仿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 等候打开管道另一端的进程。必须先连接,才能使用。这样管道就行不通了。应该用什么内核对象呢?谢谢!
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 等候打开管道另一端的进程。必须先连接,才能使用。这样管道就行不通了。应该用什么内核对象呢?谢谢!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货