1

WinAPI関数ShellExecuteEx()を使用してWindowsエクスプローラーでフォルダーを開きます。

MSDNによるとCoInitializeEx()、使用する前に必ず呼び出す必要ShellExecuteEx()がありますが、?の2番目のパラメーターにはどのフラグを使用する必要がありCoInitializeEx()ますか?

ShellExecuteがこれらのタイプのシェル拡張の1つを使用せず、それらのインスタンスでCOMを初期化する必要がまったくない場合も確かにあります。それでも、この関数を使用する前に、常にCOMを初期化することをお勧めします。

CoInitializeEx(NULL, What params should I use?); //COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)

ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = NULL;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = _T("explore");
ShExecInfo.lpFile = pszParseName;
ShExecInfo.lpParameters = NULL;
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_MAXIMIZE;
ShExecInfo.hInstApp = NULL;

ShellExecuteEx(&ShExecInfo);
CoUninitialize();
4

1 に答える 1

1

CoInitializeEx()アプリケーションのCOM-SCMを初期化します。COINIT_APARTMENTTHREADEDこれまでのところ、コードからCOMオブジェクトを使用していませんが、少なくとも、を使用して呼び出す必要があります。これは、呼び出しスレッドが独自のアパートメントに配置され、COMオブジェクトへの呼び出しをマーシャリングする必要があることを意味します。ここを見れば
呼び出すオプションもあります。パフォーマンスが向上する可能性があるため、このオプションを使用することをお勧めします。COMは、特にアパートに関しては非常に複雑なトピックです。COINIT_MULTITHREADED

于 2013-03-24T08:07:28.293 に答える