我正在使用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/