假设我想要该程序" C:\ MyProgram.exe"使用两个变量的参数运行。出现的问题是MyProgram只接收2个参数,而我明确地传递了3个参数。
我的代码:
SHELLEXECUTEINFO ShExecInfo = { 0 };
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShExecInfo.lpFile = T("\"C:\\MyProgram.exe\"");
ShExecInfo.lpParameters = _T("\"\"") _T(" ") + dir + file[i] + _T(" ") + dir + outputfile + _T(".TIFF");
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess, 1500);
if(GetExitCodeProcess(ShExecInfo.hProcess, &exitCode)){
MessageBox(_T("Conversion ") + file[i] + _T(" unsuccesful."), _T("TEST!"), MB_OK);
succes = 0;
}
由于使用ShellExecuteEx在互联网上没有关于变量参数的大量信息,我找不到合适的解释。
你们中的任何人都知道如何解决这个问题吗? 提前谢谢!
答案 0 :(得分:2)
只是因为你的构造产生了一个临时对象并且存储了指向它的指针(我想是一个CString),但是当你启动程序时,临时对象已经被销毁了。
auto str = _T("\"\"") _T(" ") + dir + file[i] + _T(" ") + dir + outputfile + _T(".TIFF");
ShExecInfo.lpParameters = str;
ShellExecuteEx(&ShExecInfo);
答案 1 :(得分:0)
您是否检查了MyProgram
收到的两个参数,它们具有哪些值?
问题很可能是这段代码:
ShExecInfo.lpParameters = _T("\"\"") _T(" ") + dir + file[i] + _T(" ") + dir + outputfile + _T(".TIFF");
您没有说明dir
或file[i]
有哪些类型,但一般情况下添加C样式字符串(TCHAR[]
或TCHAR*
仍为C样式字符串)不会连接它们,如果这是你期望在这种情况下发生的事情。
通过显示该分配,或者最好使用调试器,检查分配后ShExecInfo.lpParameters
包含的内容。