C ++ Ошибка при изменении курсора из файла ресурсов

Я пытаюсь изменить курсор моей мыши с помощью файла .cur в файле ресурсов.

Когда я пробую свой код, я получаю эту ошибку:

Возникла исключительная ситуация в 0x77EB7392 (ntdll.dll) в CleanResourceFiles.exe: 0xC0000005: нарушение прав доступа при чтении местоположения 0x00000066.

Вот код:

HCURSOR curs = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_CURSOR1), 2, 0, 0, LR_LOADFROMFILE);
SetSystemCursor(curs, 32512);

Замечания : IDC_CURSOR1 мой курсор и 32512 идентификатор классического курсора со стрелкой Я также включил <Windows.h> и мой resource.h,

Я использую Visual Studio Community 2017, с Win10.

Я пробовал другие функции, такие как LoadCursor(), Код выше взят из «VineMemz».

Наконец, когда я попытался изменить курсор с помощью LoadFromFile() используя путь к моему .cur файл, это работает.

0

Решение

При звонке LoadImage()вы указываете LR_LOADFROMFILE флаг, так что lpszName Параметр будет интерпретироваться как указатель на строку с нулевым символом в конце, содержащую путь к .cur файл для загрузки. Но вы передаете идентификационный номер ресурса вместо строки пути к файлу (я предполагаю, IDC_CURSOR1 равен 102 (0x66), что соответствует адресу памяти, указанному в сообщении об ошибке). Вам нужно избавиться от LR_LOADFROMFILE флаг при загрузке изображения из ресурсов.

Кроме того, вам нужно передать фактический дескриптор модуля EXE в hinst параметр, а не NULL (NULL можно использовать только при загрузке изображений, определенных OEM).

Также. вы не должны использовать «магические числа». 2 на LoadImage() следует заменить на IMAGE_CURSOR постоянная, а 32512 на SetSystemCursor() следует заменить на OCR_NORMAL постоянная.

Попробуй это:

HCURSOR curs = (HCURSOR) LoadImage(GetModuleHandle(), MAKEINTRESOURCE(IDC_CURSOR1), IMAGE_CURSOR, 0, 0, 0);
SetSystemCursor(curs, OCR_NORMAL);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]