2015-03-17 3 views
2

Скажем, я хочу, чтобы программа «C: \ MyProgram.exe» запускалась с параметрами, которые являются двумя переменными. Возникающая проблема заключается в том, что MyProgram получает только 2 параметра, хотя я четко передаю 3 параметра.Почему параметры ShellExecuteEx() не работают?

Мой код:

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, я не мог найти правильное объяснение этому.

Возможно, кто-нибудь из вас знает, как решить эту проблему? Спасибо заранее!

ответ

2

Просто потому, что ваша конструкция выводится во временный объект, и указатель на него (CString, я думаю) сохраняется, но временный объект уже уничтожен при запуске программы.

auto str = _T("\"\"") _T(" ") + dir + file[i] + _T(" ") + dir + outputfile + _T(".TIFF"); 
ShExecInfo.lpParameters = str; 
ShellExecuteEx(&ShExecInfo); 
+0

Спасибо, это сработало для меня. Что делает ключевое слово «auto» точно? Определяет ли он тип данных для меня? – moffeltje

+1

Да. http://www.codeproject.com/Articles/570638/Ten-Cplusplus-Features-Every-Cplusplus-Developer – xMRi

0

Вы проверили эти два параметра, которые MyProgram получает, какие у них значения?

Проблема, скорее всего, этот кусок кода:

ShExecInfo.lpParameters = _T("\"\"") _T(" ") + dir + file[i] + _T(" ") + dir + outputfile + _T(".TIFF"); 

Вы не сказали, какие типы dir или file[i] есть, но в целом добавление строк в стиле C, как это (TCHAR[] или TCHAR* по-прежнему C стиль строки) не объединяет их, если это то, что вы ожидаете в этом случае.

Проверить, что ShExecInfo.lpParameters содержит после этого назначения, отображая его или желательно с помощью отладчика.

Смежные вопросы