class AFX_EXT_CLASS CMDICustomChildWnd : public CMDIChildWnd
{
...
}
Прооблема с Dll.
Код:
Проект компилируется без проблем но вылезает ошибка <Прервать><Повторить><Пропустить>. Если нажать 3 раза на <Пропустить> приложение запустится, но дочернее окошко совсем другое, похожее на обычное окошко и не работает только в окне Родительского окна.
Цитата:
Originally posted by AndreySar
Создал свой класс на основе CMDIChildWnd, для работы с дочерними окнами в MDI-приложении. Все работает нормально. Попытался выделить его в dll:
Проект компилируется без проблем но вылезает ошибка <Прервать><Повторить><Пропустить>. Если нажать 3 раза на <Пропустить> приложение запустится, но дочернее окошко совсем другое, похожее на обычное окошко и не работает только в окне Родительского окна.
Создал свой класс на основе CMDIChildWnd, для работы с дочерними окнами в MDI-приложении. Все работает нормально. Попытался выделить его в dll:
Код:
class AFX_EXT_CLASS CMDICustomChildWnd : public CMDIChildWnd
{
...
}
{
...
}
Проект компилируется без проблем но вылезает ошибка <Прервать><Повторить><Пропустить>. Если нажать 3 раза на <Пропустить> приложение запустится, но дочернее окошко совсем другое, похожее на обычное окошко и не работает только в окне Родительского окна.
Проблема пропадает если компилировать Dll как Debug, а не Release. Что это может быть такое?
Трасируй mfc-функции для для локализации ошибки, а там разбереш. Из-за чего вылетает окошко.
Цитата:
Originally posted by Alexandoros
Dll как mfc-расширение сделана?
Трасируй mfc-функции для для локализации ошибки, а там разбереш. Из-за чего вылетает окошко.
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
#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
Сам недавно писал длл с класами от мфс. Там пару глюков наметилось - в часности трудности с загрузкой ресурсов - все вручную.
Цитата:
Originally posted by Alexandoros
А где поддержка док/вью архитектуры? Без неё работать вряд-ли будет.
Сам недавно писал длл с класами от мфс. Там пару глюков наметилось - в часности трудности с загрузкой ресурсов - все вручную.
А где поддержка док/вью архитектуры? Без неё работать вряд-ли будет.
Сам недавно писал длл с класами от мфс. Там пару глюков наметилось - в часности трудности с загрузкой ресурсов - все вручную.
Можешь скинуть?
Цитата:
Originally posted by AndreySar
Проблема пропадает если компилировать Dll как Debug, а не Release. Что это может быть такое?
Проблема пропадает если компилировать Dll как Debug, а не Release. Что это может быть такое?
Если DLL откомпилирована как Release, то и проект следует компилировать как Release.
+ к тому же желательно использовать одну и ту же версию рантайма. Чтоб не было проблем с выделением /удалением памяти общих ресурсов библиотеки-приложения.
Цитата:
Originally posted by Alexandoros
Сам недавно писал длл с класами от мфс. Там пару глюков наметилось - в часности трудности с загрузкой ресурсов - все вручную.
Сам недавно писал длл с класами от мфс. Там пару глюков наметилось - в часности трудности с загрузкой ресурсов - все вручную.
Встретился с этой же проблемой, пока не думал как её решить - как ты её решил?
Цитата:
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)
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 - класс сделаный с ресурса.
Цитата:
Originally posted by Alexandoros
Вот так
(весь код находится в длл в экспортируемой процедуре.)
Все ресурсы созданы в длл. IDD_SETUP_DLG - ид диалога в длл. RT_DIALOG - стандартная виндовая константа. CSetupDlg - класс сделаный с ресурса.
Вот так
(весь код находится в длл в экспортируемой процедуре.)
Код:
...
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)
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 - класс сделаный с ресурса.
Спасибо, буду разбираться