CreateProgress,GetExitCodeProcess 取返回值总取不对

x_sina_x 2011-08-27 03:47:32
调用Beyong compare(简称BC)进行文件比较,获取比较结果;代码,如下,求释疑。
根据BC的说明:
Level Meaning

0 Success

1 Binary Same

2 Rules-Based Same

11 Binary Difference

12 Similar

13 Rules-Based Difference

14 Conflicts Detected

100 Unknown error

101 Conflicts Detected. Merge output not written.

PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&si, sizeof(STARTUPINFO));

CString strTmp("F:\\Beyond Compare\\BCompare.exe \"C:\\Test\" \"C:\\Test\" ");

CreateProcess(NULL,
strTmp.GetBuffer(strTmp.GetLength()),
NULL,NULL,FALSE,
CREATE_NO_WINDOW,
NULL,NULL,
&si,
&pi);
strTmp.ReleaseBuffer();

WaitForSingleObject(pi.hProcess,INFINITE);

unsigned long result = 0;
GetExitCodeProcess(pi.hProcess, &result );//这里result总是返回错误,返回result为100

CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
...全文
728 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
辰岡墨竹 2011-08-27
  • 打赏
  • 举报
回复
自己粗心多打了一个“不”,“如果不是0表示成功”……
辰岡墨竹 2011-08-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wltg2001 的回复:]

引用 4 楼 bokutake 的回复:
HRESULT hr = GetExitCodeProcess(……)
看看这个函数本身执行成功了么?如果不是0表示不成功,用GetLastError取一下错误原因。

说反了吧,返回0则表示调用出错。
[/Quote]

Return Value

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

ERROR_SUCCESS 就是 0
zgl7903 2011-08-27
  • 打赏
  • 举报
回复
在命令行模式下运行命令试试看 是否正常
F:\Beyond Compare\BCompare.exe "C:\Test" "C:\Test"
怀疑是不是传递的参数有问题
Lactoferrin 2011-08-27
  • 打赏
  • 举报
回复
说不定就是100 Unknown error
wltg2001 2011-08-27
  • 打赏
  • 举报
回复
那个帖子和你的要求一样,不过楼主认定正确的方法是错误的。
GetExitCodeProcess得到的值一般是WinMain函数返回的值,你的那个程序应该不会通过WinMain提供比较的结果吧。
我不知道你所说的Beyong compare是什么界面的程序,如果是控制台程序的话,可以用匿名管道获取输出值进行分析。
x_sina_x 2011-08-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wltg2001 的回复:]

引用 7 楼 x_sina_x 的回复:
引用 3 楼 fangchao918628 的回复:

你比较文件的结果...应该和你获取进程退出状态不是一个东西吧!

请问如何获取比较文件的结果呢?

这个要看你调用的这个软件的具体情况了,不过,一般用GetExitCodeProcess是做不到的。
[/Quote]
我参考了这个帖子:http://topic.csdn.net/u/20101104/20/58ae2f9e-779d-45fa-9993-f2019645fb8d.html
才用此方法的,您有和其他方式可以推荐么?
wltg2001 2011-08-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 x_sina_x 的回复:]
引用 3 楼 fangchao918628 的回复:

你比较文件的结果...应该和你获取进程退出状态不是一个东西吧!

请问如何获取比较文件的结果呢?
[/Quote]
这个要看你调用的这个软件的具体情况了,不过,一般用GetExitCodeProcess是做不到的。
x_sina_x 2011-08-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fangchao918628 的回复:]

你比较文件的结果...应该和你获取进程退出状态不是一个东西吧!
[/Quote]
请问如何获取比较文件的结果呢?
wltg2001 2011-08-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bokutake 的回复:]
HRESULT hr = GetExitCodeProcess(……)
看看这个函数本身执行成功了么?如果不是0表示不成功,用GetLastError取一下错误原因。
[/Quote]
说反了吧,返回0则表示调用出错。
wltg2001 2011-08-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fangchao918628 的回复:]
你比较文件的结果...应该和你获取进程退出状态不是一个东西吧!
[/Quote]
我说我没看明白呢?GetExitCodeProcess出错的话,明明返回值是0。
辰岡墨竹 2011-08-27
  • 打赏
  • 举报
回复
HRESULT hr = GetExitCodeProcess(……)
看看这个函数本身执行成功了么?如果不是0表示不成功,用GetLastError取一下错误原因。
fangchao918628 2011-08-27
  • 打赏
  • 举报
回复
你比较文件的结果...应该和你获取进程退出状态不是一个东西吧!
wltg2001 2011-08-27
  • 打赏
  • 举报
回复
GetExitCodeProcess(pi.hProcess, &result );//这里result总是返回错误,返回result为100
================
你怎么知道它返回错误?
x_sina_x 2011-08-27
  • 打赏
  • 举报
回复
沉了,UP,UP

15,471

社区成员

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

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