Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Прооблема с Dll.

324
04 марта 2006 года
AndreySar
532 / / 01.08.2004
Создал свой класс на основе CMDIChildWnd, для работы с дочерними окнами в MDI-приложении. Все работает нормально. Попытался выделить его в dll:

 
Код:
class AFX_EXT_CLASS CMDICustomChildWnd : public CMDIChildWnd
{
...
}


Проект компилируется без проблем но вылезает ошибка <Прервать><Повторить><Пропустить>. Если нажать 3 раза на <Пропустить> приложение запустится, но дочернее окошко совсем другое, похожее на обычное окошко и не работает только в окне Родительского окна.
324
05 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by AndreySar
Создал свой класс на основе CMDIChildWnd, для работы с дочерними окнами в MDI-приложении. Все работает нормально. Попытался выделить его в dll:

 
Код:
class AFX_EXT_CLASS CMDICustomChildWnd : public CMDIChildWnd
{
...
}


Проект компилируется без проблем но вылезает ошибка <Прервать><Повторить><Пропустить>. Если нажать 3 раза на <Пропустить> приложение запустится, но дочернее окошко совсем другое, похожее на обычное окошко и не работает только в окне Родительского окна.



Проблема пропадает если компилировать Dll как Debug, а не Release. Что это может быть такое?

398
06 марта 2006 года
Alexandoros
630 / / 21.10.2005
Dll как mfc-расширение сделана?
Трасируй mfc-функции для для локализации ошибки, а там разбереш. Из-за чего вылетает окошко.
324
06 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Alexandoros
Dll как mfc-расширение сделана?
Трасируй mfc-функции для для локализации ошибки, а там разбереш. Из-за чего вылетает окошко.



Без mfc-расширения не работает, т.к наследует mfc-класс. В самом классе остался только конструктор и деструктор, которые ввобще ничего не делают.

Код:
#include "stdafx.h"

#ifndef _INSIDE_VISUAL_CPP_MDI_CUSTOM_CHILD_WND
#define _INSIDE_VISUAL_CPP_MDI_CUSTOM_CHILD_WND

class AFX_EXT_CLASS CMDICustomChildWnd : public CMDIChildWnd
{
    // remembers where it was on the desktop

    DECLARE_DYNAMIC(CMDICustomChildWnd )

protected: // Create from serialization only
    CMDIChildWnd();
    ~CMDIChildWnd();
    //{{AFX_VIRTUAL(CMDICustomChildWnd )
    public:
    protected:
    //}}AFX_VIRTUAL

    //{{AFX_MSG(CMDICustomChildWnd)    
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};

#endif // _INSIDE_VISUAL_CPP_MDI_CUSTOM_CHILD_WND
398
07 марта 2006 года
Alexandoros
630 / / 21.10.2005
А где поддержка док/вью архитектуры? Без неё работать вряд-ли будет.

Сам недавно писал длл с класами от мфс. Там пару глюков наметилось - в часности трудности с загрузкой ресурсов - все вручную.
324
07 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Alexandoros
А где поддержка док/вью архитектуры? Без неё работать вряд-ли будет.

Сам недавно писал длл с класами от мфс. Там пару глюков наметилось - в часности трудности с загрузкой ресурсов - все вручную.




Можешь скинуть?

324
09 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by AndreySar
Проблема пропадает если компилировать Dll как Debug, а не Release. Что это может быть такое?



Если DLL откомпилирована как Release, то и проект следует компилировать как Release.

398
09 марта 2006 года
Alexandoros
630 / / 21.10.2005
+ к тому же желательно использовать одну и ту же версию рантайма. Чтоб не было проблем с выделением /удалением памяти общих ресурсов библиотеки-приложения.
324
10 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Alexandoros
Сам недавно писал длл с класами от мфс. Там пару глюков наметилось - в часности трудности с загрузкой ресурсов - все вручную.



Встретился с этой же проблемой, пока не думал как её решить - как ты её решил?

398
10 марта 2006 года
Alexandoros
630 / / 21.10.2005
Цитата:
Originally posted by AndreySar
Встретился с этой же проблемой, пока не думал как её решить - как ты её решил?



Вот так

(весь код находится в длл в экспортируемой процедуре.)

Код:
...
      DWORD err;
//  LPCDLGTEMPLATE lpDialogTemplate;

    HMODULE hLib = GetModuleHandle("ICars.dll");
    HRSRC hRes = FindResource(hLib, MAKEINTRESOURCE(IDD_SETUP_DLG), RT_DIALOG);
    HGLOBAL hLRes = LoadResource(hLib, hRes);
    //lpDialogTemplate = (LPCDLGTEMPLATE)LockResource(hLRes);

    CSetupDlg dlg;
    err = dlg.InitModalIndirect(hLRes);

    ...

    if( dlg.DoModal() == IDOK)


Все ресурсы созданы в длл. IDD_SETUP_DLG - ид диалога в длл. RT_DIALOG - стандартная виндовая константа. CSetupDlg - класс сделаный с ресурса.
324
10 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Alexandoros
Вот так

(весь код находится в длл в экспортируемой процедуре.)
Код:
...
      DWORD err;
//  LPCDLGTEMPLATE lpDialogTemplate;

    HMODULE hLib = GetModuleHandle("ICars.dll");
    HRSRC hRes = FindResource(hLib, MAKEINTRESOURCE(IDD_SETUP_DLG), RT_DIALOG);
    HGLOBAL hLRes = LoadResource(hLib, hRes);
    //lpDialogTemplate = (LPCDLGTEMPLATE)LockResource(hLRes);

    CSetupDlg dlg;
    err = dlg.InitModalIndirect(hLRes);

    ...

    if( dlg.DoModal() == IDOK)


Все ресурсы созданы в длл. IDD_SETUP_DLG - ид диалога в длл. RT_DIALOG - стандартная виндовая константа. CSetupDlg - класс сделаный с ресурса.



Спасибо, буду разбираться

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог