2

プログラム "C:\MyProgram.exe" を 2 つの変数であるパラメーターを使用して実行するとします。発生する問題は、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 の変数パラメーターに関する情報はインターネット上にあまりないため、これに関する適切な説明を見つけることができませんでした。

この問題を解決する方法を知っている人はいますか?前もって感謝します!

4

2 に答える 2

2

単純に、構成が一時オブジェクトになり、それへのポインター (私が推測する CString ) が格納されますが、一時オブジェクトはプログラムを起動したときに既に破棄されているためです。

auto str = _T("\"\"") _T(" ") + dir + file[i] + _T(" ") + dir + outputfile + _T(".TIFF");
ShExecInfo.lpParameters = str;
ShellExecuteEx(&ShExecInfo);
于 2015-03-17T09:53:23.647 に答える
0

受け取った 2 つのパラメーターを確認しましたMyProgramか。値は何ですか?

問題はおそらく次のコードです。

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

dirタイプや持っているものは言いませんでしfile[i]たが、一般に、このようなCスタイルの文字列を追加しても(TCHAR[]またはTCHAR*まだCスタイルの文字列です)、この場合に起こると予想される場合は、それらを連結しません。

ShExecInfo.lpParameters表示するか、できればデバッガーを使用して、その割り当ての後に何が含まれているかを確認します。

于 2015-03-17T09:52:21.790 に答える