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 

WLX: VisualStudio - пляска с бубном

 
Post new topic   Reply to topic    Total Commander Forum Index -> Написание плагинов для Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Wizard109



Joined: 10 Aug 2012
Posts: 9

Post (Separately) Posted: 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
Back to top
View user's profile Send private message
Maximus



Joined: 07 Apr 2005
Posts: 927
Location: Украина, Кировоградская обл., г. Знаменка

Post (Separately) Posted: Fri Aug 10, 2012 23:59    Post subject: Reply with quote

Попробуй так:
Code:
hWnd = CreateWindow(PLUGIN_WNDCLASS_NAME, PLUGIN_WNDCLASS_NAME, WS_OVERLAPPEDWINDOW, 0, 0, 80, 60, 0, 0, hInst, 0);
if(hWnd)
{
   SetWindowLong(hWnd,GWL_STYLE,WS_CHILD | WS_MAXIMIZE & !WS_CAPTION & !WS_BORDER);
   SetParent(hWnd,ParentWin);
}


_________________
tcPhonebook|AppLoader|Українізація TC|Ultimate Calendar
Back to top
View user's profile Send private message
Wizard109



Joined: 10 Aug 2012
Posts: 9

Post (Separately) Posted: Sat Aug 11, 2012 00:14    Post subject: Reply with quote

Maximus wrote:
Попробуй так:
Код:
hWnd = CreateWindow(PLUGIN_WNDCLASS_NAME, PLUGIN_WNDCLASS_NAME, WS_OVERLAPPEDWINDOW, 0, 0, 80, 60, 0, 0, hInst, 0);
if(hWnd)
{
SetWindowLong(hWnd,GWL_STYLE,WS_CHILD | WS_MAXIMIZE & !WS_CAPTION & !WS_BORDER);
SetParent(hWnd,ParentWin);
}



Пасиб. попробую завтра.
Сейчас оказалось что проблема была с тем, что у меня был установлен GSA Lister 1.02. Даже стандартный сэмпл с ним не работал. Кроме прочего он вываливает Дельфинский сепшн, но разбирать его на си совсем не хотелось.

Кстати если плагин использует "не бесплатную" длл, но найти ее можно во многих играх, его выложат или оставить его у себя и выкладывать неофициально ?
_________________
Vexilla regis prodeunt inferni
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 5796
Location: Москва

Post (Separately) Posted: Sun Aug 12, 2012 15:06    Post subject: Reply with quote

Wizard109 wrote:
Кстати если плагин использует "не бесплатную" длл, но найти ее можно во многих играх, его выложат или оставить его у себя и выкладывать неофициально ?

Зависит от лицензии на эту DLL. Если такое выкладывание нарушает лицензию, то на wincmd.ru такой плагин публиковать нельзя.
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Написание плагинов для Total Commander All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group