|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.03.2013, 18:15 | #1 |
Пользователь
Регистрация: 29.03.2009
Сообщений: 83
|
Можно ли использовать CDialog в DLL?
Мне не удаётся создать объект класса CDialog в функции, описанной в DLL.
После вызова конструктора hWnd = 0, а при вызове DoModal() - появляется сообщение Debug assertion failed. Диалог создан Wizard'ом, пустой, из двух кнопок - ОК и Cancel. Кто - нибудь пробовал это делать? В этой же функции создаётся объект класса CWnd и работает. |
10.03.2013, 22:15 | #2 |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
AfxSetResourceHandle вот это должно помочь
|
10.03.2013, 23:58 | #3 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
Когда вылезает Debug assertion failed там указаны имя файла и номер строки. Открываете исходники MFC и смотрите в данном файле на данной строке что именно проверяется. Скорее всего там даже будет комментарий с пояснениями.
|
13.03.2013, 21:16 | #4 |
Пользователь
Регистрация: 29.03.2009
Сообщений: 83
|
При вызове DoModal() в DLL - функции срабатывает:
Код:
Код:
В теле DllMain AfxGetInstanceHandle() даёт 0. Странно всё это... Последний раз редактировалось Dmitry_B; 13.03.2013 в 21:37. |
21.04.2016, 13:27 | #5 |
Новичок
Джуниор
Регистрация: 21.04.2016
Сообщений: 1
|
Вариант 1 : создать другой проект DLL. (вроде MFC Shared DLL) .... поэксперементируйте! После создания проекта в одном из файлов должен быть вызов "CWinApp::ExitInstance();"
Вариант 2 : если возникает глюк с "afxCurrentInstanceHandle" (запарило искать в интернете ответ): 1. добавить в файл afxwin1.inl функцию : void SetCurrentInstanceHandle(HINSTANCE hInst){afxCurrentInstanceHandle = hInst;} 2. перед функцией создания окна (в своей программе): #include "afxwin1.inl" 3. перед созданием окна (в своей программе): SetCurrentInstanceHandle((HINSTANCE )hInstance); 4. hInstance взять из переменных программы (есть в любой DLL или EXE). Пример (у меня в проекте): "CWinApp::m_hInstance" 5. В итоге : #include "afxwin1.inl" void MyFun() { SetCurrentInstanceHandle(CWinApp::m _hInstance); ... создаём окно ... } Последний раз редактировалось Flint30000; 21.04.2016 в 13:31. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Почему не работает DLL - функция, содержащая CDialog? | Dmitry_B | Visual C++ | 0 | 20.01.2013 10:58 |
Не возможно использовать dll | WebbMan | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 07.12.2012 17:34 |
можно ли использовать принтер | VAnj2607 | Помощь студентам | 3 | 05.05.2011 16:40 |
функция Get Document не работает в CDialog. как получить документ в CDIalog | MFCCasper | Общие вопросы C/C++ | 4 | 24.03.2010 15:06 |