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

Ваш аккаунт

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

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

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

Dll и диалог

15K
28 апреля 2006 года
DubAlex
10 / / 26.04.2006
Есть проект, в результате компилирования которого формируется DLL. В ней размещаю диалог: в проект добавляю файл ресурсов (Project->Add to project->New->Resource Script), создаю ресурс диалога (Insert->Dialog), вызываю classWizard (Ctrl+W), далее в качестве источника указываю файл с расширением rc, создаю новый класс.
Вроде бы все правильно. Но когда пытаюсь вызвать его с помощью функции DoModal() вылетает окно с сообщением "Debug Assertion Failed" и указывается файл afxwin1.inl строка 22. Если использовать трассировку, то после входа в функцию DoModal() и при выполнении строки:
HINSTANCE hInst = AfxGetResourceHandle();
появляется данное сообщение.
Прошу подсказать, как с этим можно справиться?
15K
02 мая 2006 года
DubAlex
10 / / 26.04.2006
Цитата:
Originally posted by DubAlex
Есть проект, в результате компилирования которого формируется DLL...
... Но когда пытаюсь вызвать его с помощью функции DoModal() вылетает окно с сообщением "Debug Assertion Failed" и указывается файл afxwin1.inl строка 22.


Я пробовал использовать
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
но результат прежний. И вообще, при трассировке эта строчка игнорируется, просто перескакиваем через нее и все.
В MSDN говорится, что AFX_MANAGE_STATE нужно использовать для экспортируемых функции( если я правильно понял). У меня таких функций нет. Может из-за этого строка
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
игнорируется при трассировке?
P.S. У меня есть DLL, в которой описан диалог, и в этой же DLL он и вызывается.

505
02 мая 2006 года
vAC
343 / / 28.02.2006
Цитата:
Originally posted by DubAlex
Я пробовал использовать
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
но результат прежний. И вообще, при трассировке эта строчка игнорируется, просто перескакиваем через нее и все.
В MSDN говорится, что AFX_MANAGE_STATE нужно использовать для экспортируемых функции( если я правильно понял). У меня таких функций нет. Может из-за этого строка
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
игнорируется при трассировке?
P.S. У меня есть DLL, в которой описан диалог, и в этой же DLL он и вызывается.



Тоже была проблема с этим. Я ее решил на этапе создания DLL. Я создавал ее в Wizard'е и выбрал "MFC extension DLL" - это помогло. Там что-то с ресурсом творилось не помню точно что...

534
02 мая 2006 года
HarryAxe
448 / / 19.01.2006
Цитата:
Originally posted by DubAlex
Есть проект, в результате компилирования которого формируется DLL. В ней размещаю диалог: в проект добавляю файл ресурсов (Project->Add to project->New->Resource Script), создаю ресурс диалога (Insert->Dialog), вызываю classWizard (Ctrl+W), далее в качестве источника указываю файл с расширением rc, создаю новый класс.
Вроде бы все правильно. Но когда пытаюсь вызвать его с помощью функции DoModal() вылетает окно с сообщением "Debug Assertion Failed" и указывается файл afxwin1.inl строка 22. Если использовать трассировку, то после входа в функцию DoModal() и при выполнении строки:
HINSTANCE hInst = AfxGetResourceHandle();
появляется данное сообщение.
Прошу подсказать, как с этим можно справиться?


Перед созданием диалога пишем AfxSetResourceHandle(GetModuleHandle(szLibName)) либо AfxSetResuorceHandle(hModule), hModule получаем из DllMain.
Проблема в том, что для загрузки ресурса у тебя использовался HINSTANCE приложения, из которого вызывается конструктор класса диалога, вместо HMODULE твоей dll.

398
03 мая 2006 года
Alexandoros
630 / / 21.10.2005
 
Код:
HMODULE hLib = GetModuleHandle("I.dll");
    HRSRC hRes = FindResource(hLib, MAKEINTRESOURCE(IDD_SETUP_DLG), RT_DIALOG);
    HGLOBAL hLRes = LoadResource(hLib, hRes);


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


CSetupDlg должен иметь 2(!!) конструктора CSetupDlg();CSetupDlg(CWnd* pParent);

По умолчанию создается только 1 - CSetupDlg(CWnd* pParent = NULL);


CSetupDlg::CSetupDlg()
{
}

CSetupDlg::CSetupDlg(CWnd* pParent)
:CDialog(IDD, pParent)
{
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог