怎么获取VC编译器CL.exe的编译结果

allcotte 2009-07-09 03:50:08
我想在软件中用CreateProcess调用cl.exe编译某源文件,怎么才能得到编译的结果,比如编译成功与否,也就是vc下点编译按钮IDE下方输出的那些编译信息.
请各位高手指点,谢谢!
...全文
205 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
o_yale_o 2009-07-10
  • 打赏
  • 举报
回复
看VS插件开发帮助,看VC又没有暴露接口给你?
anders0821 2009-07-10
  • 打赏
  • 举报
回复
CL是不是控制台程序啊,用输出重定向!
zoulie 2009-07-10
  • 打赏
  • 举报
回复
创建进程执行CL.exe时,建立一个匿名管道,将cl.exe进程的信息全部读出来
网上很多的,比较简单
biweilun 2009-07-10
  • 打赏
  • 举报
回复
与命令行通信的源代码请见:http://www.brsbox.com/filebox/down/fc/02d018c57f55384bd69683ea0220da25
biweilun 2009-07-10
  • 打赏
  • 举报
回复
cl.exe是在命令行下运行的,通过命令行强大的管道 >> 能方便的导出结果。而VC中试通过管道实现回显的
BlackMasser 2009-07-10
  • 打赏
  • 举报
回复
看线程(进程)执行批处理:在线程里面批处理,把得到的编译结果重定向到某个文件内.
主线程(进程)wait直到文件产生,把数据读进来就ok.
na_he 2009-07-10
  • 打赏
  • 举报
回复
study...
mengjj 2009-07-10
  • 打赏
  • 举报
回复

bool ExecuteApp(const char *cmdLine, DWORD &exitCode, string &resStr)
{
resStr = "";
exitCode = -1;

SECURITY_ATTRIBUTES saPipe;
saPipe.nLength = sizeof(SECURITY_ATTRIBUTES);
saPipe.lpSecurityDescriptor = NULL;
saPipe.bInheritHandle = TRUE;

HANDLE hReadPipe, hWritePipe;
if (CreatePipe(&hReadPipe, &hWritePipe, &saPipe, 0) == 0)
return false;

SECURITY_ATTRIBUTES sa;
ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
STARTUPINFO startupInfo;
ZeroMemory(&startupInfo, sizeof(STARTUPINFO));
startupInfo.cb = sizeof(STARTUPINFO);
startupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
startupInfo.hStdError = hWritePipe;
startupInfo.hStdOutput = hWritePipe;
PROCESS_INFORMATION processInfo;

char *cmdStr = new char[strlen(cmdLine) + 1];
strcpy(cmdStr, cmdLine);
if (CreateProcess(NULL, cmdStr, &sa, &sa, TRUE, 0, NULL, NULL, &startupInfo, &processInfo))
{
WaitForSingleObject(processInfo.hProcess, INFINITE);
GetExitCodeProcess(processInfo.hProcess, &exitCode);
CloseHandle(hWritePipe);
char buf[256];
DWORD num = 0;
while (ReadFile(hReadPipe, buf, sizeof(buf) - 1, &num, NULL))
{
buf[num] = '\0';
resStr += buf;
}
CloseHandle(hReadPipe);
}
else
{
CloseHandle(hWritePipe);
CloseHandle(hReadPipe);
// ShowWinError();
delete []cmdStr;
exitCode = GetLastError();
return false;
}

delete []cmdStr;
CloseHandle(processInfo.hThread);
CloseHandle(processInfo.hProcess);

return true;
}
申宇田 2009-07-09
  • 打赏
  • 举报
回复
摘自MSDN:
cl.exe returns zero for success (no errors) and non-zero otherwise.
The return value of cl.exe can be useful if you are compiling from a script, or .bat file. You should still plan to capture the output of the compiler, in case there are errors or warnings, so you can resolve them.

如果你要cl.exe的全部输出信息,可以把输出存到文件里面,然后解析文件得到结果。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧