我正在开发一个关于Windows的c ++项目,我想使用cygwin作为目标环境,但是作为替换cmd的shell,我的项目实际上是为mingw编译的。
我的程序现在只执行一个CreateProcess,问题是,如果我从cmd调用它,它可以工作,如果我从cygwin执行程序,它仍然没有做什么,而CreateProcess()仍然返回true。
这就是代码:
int exec_module(const string& name, HANDLE stdIn, HANDLE stdOut, HANDLE stdErr) {
STARTUPINFO child_sinfo = { sizeof(child_sinfo) };
PROCESS_INFORMATION child_pinfo;
ZeroMemory(&child_sinfo, sizeof(child_sinfo));
child_sinfo.cb = sizeof(child_sinfo);
ZeroMemory(&child_pinfo, sizeof(child_pinfo));
child_sinfo.dwFlags = STARTF_USESTDHANDLES;
child_sinfo.hStdInput = stdIn;
child_sinfo.hStdOutput = stdOut;
child_sinfo.hStdError = stdErr;
return CreateProcess(0, _T((char *) name.c_str()), 0, 0, false,0, 0, 0, &child_sinfo, &child_pinfo);
}
我称之为:
if (!exec_module("caccone.exe", GetStdHandle(STD_INPUT_HANDLE), GetStdHandle(STD_OUTPUT_HANDLE), GetStdHandle(STD_ERROR_HANDLE))) {
cout << "Errore durante l'esecuzione del modulo" << endl;
}
我无法弄清楚问题是什么。
答案 0 :(得分:0)
我的坏在这里,为了在cygwin中运行良好,我必须在父级和子级之间添加同步代码,但cmd shell也以一种天真的方式工作。 感谢Harry Johnston对_T宏观点的看法。