1

我正在使用 WinAPI 函数ShellExecuteEx()在 Windows 资源管理器中打开一个文件夹。

根据 MSDN,我应该总是CoInitializeEx()在使用之前调用,ShellExecuteEx()但是我应该为 的第二个参数使用什么标志CoInitializeEx()

在某些情况下,ShellExecute 不使用这些类型的 Shell 扩展之一,并且这些实例根本不需要初始化 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 回答