Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: WLX: VisualStudio - пляска с бубном 
Author Message
Wizard109



PostPosted: Fri Aug 10, 2012 13:02    Post subject: WLX: VisualStudio - пляска с бубном Reply with quote

Не могу разобраться с wlx-плагином.

Сначала кусок кода:
Code:

void __stdcall ListCloseWindow(HWND ListWin)
{
    MessageBoxA(NULL, "Bye - bye", "Information", MB_OK | MB_ICONASTERISK);
}

HWND WINAPI ListLoad(HWND ParentWin,char* FileToLoad,int ShowFlags)
{
    MSG msg;
    HWND hWnd;
    WNDCLASSEX wcex;
    HINSTANCE hInst = GetModuleHandle(NULL);

    ZeroMemory(&wcex, sizeof(wcex));
    wcex.cbClsExtra = 0;
    wcex.cbSize = sizeof(wcex);
    wcex.cbWndExtra = 0;
    wcex.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hIcon = 0;
    wcex.hIconSm = 0;
    wcex.hInstance = hInst;
    wcex.lpfnWndProc = (WNDPROC)WndProc;
    wcex.lpszClassName = PLUGIN_WNDCLASS_NAME;
    wcex.lpszMenuName = 0;
    wcex.style = CS_CLASSDC;

    RegisterClassEx(&wcex);

    hWnd = CreateWindow(PLUGIN_WNDCLASS_NAME, PLUGIN_WNDCLASS_NAME, WS_CHILD, 0, 0, 80, 60, ParentWin, 0, hInst, 0);
    ShowWindow(hWnd, 1);
    UpdateWindow(hWnd);

    /*while(true)
    {
        if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
            if(msg.message == WM_QUIT)
                break;
        }
        else
        {
            break;
        }
    }*/

    return hWnd;
}


1. Если цикл с PeekMessage закомментирован - никаких ошибок не возникает, сразу же вызывается ListCloseWindow.
2. На основании п.1 возникло предположение что цикл обработки сообщений все-таки должен быть в теле ListLoad. Ок. Убираем комментарии и получаем:
* плагин работает нормально, взаимодействует с DirectX, по Esc получаем сообщение Bye-bye и lister закрывается. В ListCloseWindow пробовал закрывать окно, убивать HANDLE и ... n-вариантов.
* второй раз lister открывается но при отображении сразу же вываливает
Quote:

System Error. Code: 1400.
Недопустимый дескриптор окна.

* при закрытии Тотала имеем крэш:
Quote:

Имя события проблемы: APPCRASH
Имя приложения: TOTALCMD.EXE
...
Имя модуля с ошибкой: GSALister.wlx
...
Код исключения: c0000005
Смещение исключения: 00003202
Версия ОС: 6.1.7601.2.1.0.256.1


В OllyDbg лезть как-то совсем не хочется. Кто-нибудь знает что я не так делаю ?[/code]
_________________
Vexilla regis prodeunt inferni
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group