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

根据MSDN,我应该始终在使用CoInitializeEx()之前先调用ShellExecuteEx(),但是对于CoInitializeEx()的第二个参数应该使用哪些标志?


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();

最佳答案

CoInitializeEx()为您的应用程序初始化COM-SCM。尽管到目前为止您尚未使用代码中的任何COM对象,但至少应使用COINIT_APARTMENTTHREADED进行调用。这意味着,调用线程将放入其自己的单元中,并且需要整理对COM对象的调用。
如果您看起来here,也可以选择调用COINIT_MULTITHREADED。最好您使用此选项,因为它可能会提高性能。
COM是一个相当复杂的话题,尤其是关于公寓。

关于c++ - 如何在ShellExecuteEx中使用CoInitializeEx,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15596355/

10-10 17:03