以下のコードの(☆)
が不正なメモリアクセス(アドレス0の操作)で確実に失敗します。原因は不明です。
先に実行しているIDeskBand::GetWindow
はE_FAIL
を返すので、こちらで判別は可能かもしれません。
#define STRICT #define NOMINMAX #define WIN32_LEAN_AND_MEAN #include <Windows.h> #include <ShlObj.h> int WINAPI wWinMain(HINSTANCE, HINSTANCE, LPWSTR, int) { HRESULT hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); if (FAILED(hr)) return hr; IDeskBand* pDeskBand; hr = CoCreateInstance(CLSID_QuickLinks, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pDeskBand)); if (SUCCEEDED(hr)) { HWND hwndDeskBand; hr = pDeskBand->GetWindow(&hwndDeskBand); // hr: E_FAIL DESKBANDINFO bandInfo{}; hr = pDeskBand->GetBandInfo(0, DBIF_VIEWMODE_NORMAL, &bandInfo); // (☆) // <メモリアクセス例外>:nullptr (0)へのアクセス pDeskBand->Release(); } CoUninitialize(); return hr; }