J'ai j'execute mon applicaiton j'ai une erreur, échec du chargement de l'icone

fichier main.cpp
#define UNICODE
#define _UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
#include <iostream>
#include <chrono>
#include <atomic>
#include <iomanip>
#include "resources.h"

#define WM_TRAYICON (WM_USER + 1)
#define IDI_TRAYICON 101
#define IDM_EXIT 102
#define IDI_MYICON 101

alignas(64) std::atomic<LONGLONG> g_lastLeftClickTime{0};
LARGE_INTEGER g_frequency;
LONGLONG g_thresholdTicks;
HHOOK g_hMouseHook = NULL;
HWND g_hWnd = NULL;
NOTIFYICONDATAW g_nid = {0};
std::atomic<bool> g_blockNextLButtonUp{false};  // Indicateur de blocage du prochain WM_LBUTTONUP


__forceinline bool shouldBlockLeftClick(LONGLONG currentCounter) noexcept {
    LONGLONG lastCounter = g_lastLeftClickTime.load(std::memory_order_relaxed);
    LONGLONG elapsedTicks = currentCounter - lastCounter;
    if (elapsedTicks < g_thresholdTicks) {
        g_lastLeftClickTime.store(currentCounter, std::memory_order_relaxed);
        return true;
    }
    g_lastLeftClickTime.store(currentCounter, std::memory_order_relaxed);
    return false;
}

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) noexcept {
    if (nCode >= 0) {
        LARGE_INTEGER currentCounter;
        QueryPerformanceCounter(&currentCounter);
        
        switch (wParam) {
            case WM_LBUTTONDOWN: {
                if (shouldBlockLeftClick(currentCounter.QuadPart)) {
                    g_blockNextLButtonUp.store(true, std::memory_order_relaxed);  // Indiquer de bloquer le prochain WM_LBUTTONUP
                    return 1; // Bloque l'événement
                }
                g_blockNextLButtonUp.store(false, std::memory_order_relaxed);  // Ne pas bloquer le prochain WM_LBUTTONUP
                break;
            }
            case WM_LBUTTONUP: {
                if (g_blockNextLButtonUp.load(std::memory_order_relaxed)) {
                    return 1; // Bloque l'événement
                }
                break;
            }
        }
    }
    
    return CallNextHookEx(g_hMouseHook, nCode, wParam, lParam);
}

LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    switch (uMsg) {
        case WM_TRAYICON:
            if (lParam == WM_RBUTTONUP) {
                POINT pt;
                GetCursorPos(&pt);
                HMENU hMenu = CreatePopupMenu();
                AppendMenuW(hMenu, MF_STRING, IDM_EXIT, L"Quitter");
                SetForegroundWindow(hWnd);
                TrackPopupMenu(hMenu, TPM_RIGHTALIGN | TPM_BOTTOMALIGN, pt.x, pt.y, 0, hWnd, NULL);
                DestroyMenu(hMenu);
            }
            break;
        case WM_COMMAND:
            if (LOWORD(wParam) == IDM_EXIT) {
                DestroyWindow(hWnd);
            }
            break;
        case WM_DESTROY:
            Shell_NotifyIconW(NIM_DELETE, &g_nid);
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProcW(hWnd, uMsg, wParam, lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    QueryPerformanceFrequency(&g_frequency);
    g_thresholdTicks = (LONGLONG)(100.0 * g_frequency.QuadPart / 1000.0);

    WNDCLASSEXW wcex = {0};
    wcex.cbSize = sizeof(WNDCLASSEXW);
    wcex.lpfnWndProc = WindowProc;
    wcex.hInstance = hInstance;
    wcex.lpszClassName = L"MouseClickBlockerClass";
    RegisterClassExW(&wcex);

	g_hWnd = CreateWindowExW(0, L"MouseClickBlockerClass", L"Mouse Click Blocker",
	                        0, 0, 0, 0, 0, NULL, NULL, hInstance, NULL);

    // Initialisation de l'icône
    HICON hIcon = (HICON)LoadImage(hInstance, 
                                   MAKEINTRESOURCE(IDI_MYICON),
                                   IMAGE_ICON,
                                   GetSystemMetrics(SM_CXSMICON),
                                   GetSystemMetrics(SM_CYSMICON),
                                   LR_DEFAULTCOLOR);

    if (hIcon == NULL) {
        MessageBoxW(NULL, L"Échec du chargement de l'icône", L"Erreur", MB_ICONERROR);
        return 1;
    }

    g_nid.cbSize = sizeof(NOTIFYICONDATAW);
    g_nid.hWnd = g_hWnd;
    g_nid.uID = IDI_MYICON;
    g_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    g_nid.uCallbackMessage = WM_TRAYICON;
    g_nid.hIcon = hIcon;
    wcscpy_s(g_nid.szTip, L"Mouse Click Blocker");

    if (!Shell_NotifyIconW(NIM_ADD, &g_nid)) {
        MessageBoxW(NULL, L"Échec de l'ajout de l'icône dans le system tray", L"Erreur", MB_ICONERROR);
        return 1;
    }

    g_hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, 0);
    if (g_hMouseHook == NULL) {
        MessageBoxW(NULL, L"Échec de l'installation du hook souris", L"Erreur", MB_ICONERROR);
        return 1;
    }

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0) > 0) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    UnhookWindowsHookEx(g_hMouseHook);
	DestroyIcon(g_nid.hIcon);
    return (int)msg.wParam;
}

fichier resources.h
/* THIS FILE WILL BE OVERWRITTEN BY DEV-C++ */
/* DO NOT EDIT ! */

#ifndef MOUSEHOOKTRAY_PRIVATE_H
#define MOUSEHOOKTRAY_PRIVATE_H

/* VERSION DEFINITIONS */
#define VER_STRING	"1.0.0.0"
#define VER_MAJOR	1
#define VER_MINOR	0
#define VER_RELEASE	0
#define VER_BUILD	0
#define COMPANY_NAME	""
#define FILE_VERSION	"1.0.0.0"
#define FILE_DESCRIPTION	"BAD MOUSE PUNISHER"
#define INTERNAL_NAME	""
#define LEGAL_COPYRIGHT	""
#define LEGAL_TRADEMARKS	""
#define ORIGINAL_FILENAME	""
#define PRODUCT_NAME	""
#define PRODUCT_VERSION	"1.0.0.0"
#define IDI_MYICON 101

#endif /*MOUSEHOOKTRAY_PRIVATE_H*/

fichier resources.rc
/* THIS FILE WILL BE OVERWRITTEN BY DEV-C++ */
/* DO NOT EDIT! */

IDI_MYICON ICON "MouseHookTray.ico"