Windows 打开对话框在启用 Address Sanitizer 的情况下永远挂起

Windows Open Dialog Box hangs forever with Address Sanitizer enabled

启用 Address Sanitizer 后,无法显示打开对话框。它永远挂着。 谢谢。

运行hr = pFileOpen->Show(NULL);

时挂起
#include <windows.h>
#include <shobjidl.h> 

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{
    HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED |
        COINIT_DISABLE_OLE1DDE);
    if (SUCCEEDED(hr))
    {
        IFileOpenDialog* pFileOpen;

        // Create the FileOpenDialog object.
        hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL,
            IID_IFileOpenDialog, reinterpret_cast<void**>(&pFileOpen));

        if (SUCCEEDED(hr))
        {
            // Show the Open dialog box.
            hr = pFileOpen->Show(NULL);
            pFileOpen->Release();
        }
        CoUninitialize();
    }
    return 0;
}

此修复在当前 VS 2022 and VS 2019

中可用

旧 VS 的部分解决方法:

要减少这种情况的发生,请在程序开头添加 SetProcessAffinityMask(GetCurrentProcess(), 1);。这似乎完全解决了 Open Dialog 的情况,但没有解决更复杂的问题。 (确保不要为正常的程序运行保留此解决方法,因为它会有效地禁用多个 CPU 核心上的 运行)