Вызвать диалог из Dll

Тема в разделе "WASM.BEGINNERS", создана пользователем Valentin, 8 ноя 2009.

  1. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    130
    Прошу помощи.
    Как правильно создать ДЛЛ с диалогом (формой)?
    Как вызвать диалог из ДЛЛ в своем ЕХЕ?
     
  2. Mankubus

    Mankubus New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    76
    Valentin
    1.)
    Создайте .rc файл с диалогом в любом редакторе или же руками, далее - компилируете файл с ресурсами, его линкуете к вашей DLL.

    2.)
    Можно создать функцию в библиотеке и оперировать с диалогом в ней, смотря в чем задача заключается.
    можно так
    Код (Text):
    1. DWORD hinst=LoadLibarary("somename.dll");
    2. DWORD hdlg=CreateDialog(hinst, "DLG_NAME", hwnd, (DLGPROC) DialogProc);
    3. //далее работа с диалогом
     
  3. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    130
    Суть в следующем.
    Dll -ки представляют собой плагины AddIns, расширяющие возможность одной из программ.
    Единственная ф-ция экспорта этих Dll - "InstallDll" без параметров.
    Т.е. , вызывая из программы "InstallDll" , вызываются или отдельные ф-ции или Диалоги с прогграммой, в зависимости от того, как построена ДЛЛ.
    Задача: написать ДЛЛ, которая экспортирует мини-программу ("InstallDll") с диалогом (как класс) или по- другому .
    Я не могу получить из ДЛЛ ничего, кроме MessageBox.
     
  4. Mankubus

    Mankubus New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    76
    А что вы делаете?
     
  5. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    130
    Попробовал для данной задачи:


    InstallDll proc

    LOCAL icce:INITCOMMONCONTROLSEX
    mov icce.dwSize, SIZEOF INITCOMMONCONTROLSEX
    mov icce.dwICC, ICC_DATE_CLASSES
    invoke InitCommonControlsEx,ADDR icce
    Dialog "Календарь","MS Sans Serif",10, \ ; caption,font,pointsize
    WS_OVERLAPPED or DS_FIXEDSYS, \ ; style
    2, \ ; control count
    0,21,189,121, \ ; x y co-ordinates
    1024 ; memory buffer size

    DlgMonthCal MCS_WEEKNUMBERS,5,5,129,100,101
    DlgButton "Выход",WS_TABSTOP,141,5,40,12,IDCANCEL
    CallModalDialog hInstance,0,dlgproc,NULL
    ret
    InstallDll endp
    ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

    dlgproc proc hWin:lol: WORD,uMsg:lol: WORD,wParam:lol: WORD,lParam:lol: WORD
    .if uMsg == WM_COMMAND
    .if wParam == IDCANCEL
    jmp dlg_end
    .endif
    .elseif uMsg == WM_CLOSE
    dlg_end:
    invoke EndDialog,hWin,0
    .endif
    xor eax, eax
    ret
    dlgproc endp
    ==================================

    Из ЕХЕ вызывается нормально.
    Спасибо.
    Буду пробовать с DialogBoxParam
     
  6. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Откуда берется hInstance?
     
  7. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    130
    .data?

    hInstance dd ?
     
  8. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    И что, не заполняется нигде?
    Пользуй hModule из DllMain.
     
  9. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    130
    Все уже реализовано, спасибо всем, тема закрыта.