Сообщение об ошибке при выключении

Когда я компилирую следующий код (с Visual C ++ 2010 Express) с

cl test.cpp

и запустить .exe, а затем выключить Windows 7, я получаю сообщение об ошибке, подобное:

The instruction 0x00f....9 in explorer.exe cannot access memory at 0x00000000. Memory cannot be read.

Я пробовал много модификаций в следующем коде, но не могу решить эту проблему.
Еще одно замечание: я действительно уверен, что именно эта программа ответственна за сбой: я не запускаю ее, нет сообщения об ошибке выключения, если я ее запускаю, она есть.

В чем может быть причина крушения?

Исходный файл можно скачать здесь.


#pragma comment(lib, "user32.lib")
#define UNICODE
#include <windows.h>

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{
const wchar_t CLASS_NAME[]  = L"Sample Window Class";
WNDCLASS wc = { };
wc.lpfnWndProc   = WindowProc;
wc.hInstance     = hInstance;
wc.lpszClassName = CLASS_NAME;
RegisterClass(&wc);

HWND hwndMain = CreateWindowEx(WS_EX_TOOLWINDOW | WS_EX_LAYERED, wc.lpszClassName, 0, WS_POPUP | WS_VISIBLE | WS_SYSMENU, 0, 0, 300, 300, 0, 0, 0, 0);
SetLayeredWindowAttributes(hwndMain, 0, 192, LWA_ALPHA);
ShowWindow(hwndMain, nCmdShow);

// without the next 2 lines, no crash at shutdown
// but these 2 next lines are really important to make the main
// window part of the windows' desktop
// see comments on http://stackoverflow.com/a/27787003/1422096
HWND hwndOwner = GetWindow(GetWindow(GetTopWindow(0), GW_HWNDLAST), GW_CHILD);
SetWindowLong(hwndMain, GWL_HWNDPARENT, (LONG) hwndOwner);

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

0

Решение

Задача ещё не решена.

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


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