gpt4 book ai didi

c++ - 如何将 CoInitializeEx 与 ShellExecuteEx 一起使用

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:25 27 4
gpt4 key购买 nike

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

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

There are certainly instances where ShellExecute does not use one of these types of Shell extension and those instances would not require COM to be initialized at all. Nonetheless, it is good practice to always initalize COM before using this function.

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。您至少应该使用 COINIT_APARTMENTTHREADED 调用它,尽管到目前为止您还没有使用代码中的任何 COM 对象。这意味着,调用线程将被放入其自己的单元中,并且需要编码对 COM 对象的调用。
如果您查看 here,还可以选择调用 COINIT_MULTITHREADED .最好您应该使用此选项,因为它可能会加快性能。COM 是一个相当复杂的话题,尤其是关于公寓。

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com