Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание модального окна 
:(
    Опции темы
Smerch
Дата 10.10.2005, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 10.10.2005

Репутация: нет
Всего: нет



Подскажите пожалуйста!
У меня есть DLL и приложение которое ее загружает. Так:
Код

typedef bool (NewFunc) ();
    HINSTANCE hInstance;
    NewFunc* pFunction;
    hInstance = ::LoadLibrary("My.dll");
    pFunction = (NewFunc*) ::GetProcAddress((HMODULE) hInstance, "CreateDlg");
    ((*pFunction)()); 

В dll функция такая:
Код

bool CreateDlg() {
                CMyDlg dlg;// CMyDlg производный от CDialog
                dlg.DoModal();

    return true;
}

Основное окно приложения уже созданно. Почему DoModal() возвращает -1, не создавоя окна,
причем если я помещаю:
Код

 CMyDlg dlg;
 dlg.DoModal();

в CMyApp::InitInstance() все работает нормально(CMyApp определен в DLL)!
PM MAIL   Вверх
CaptainFlint
Дата 10.10.2005, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Искатель сокровищ
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 26.2.2003
Где: Москва

Репутация: 7
Всего: 23



При генерации в главном файле проекта пишется такой комментарий:
Цитата
// Note!
//
//  If this DLL is dynamically linked against the MFC
//  DLLs, any functions exported from this DLL which
//  call into MFC must have the AFX_MANAGE_STATE macro
//  added at the very beginning of the function.
//
//  For example:
//
//  extern "C" BOOL PASCAL EXPORT ExportedFunction()
//  {
//  AFX_MANAGE_STATE(AfxGetStaticModuleState());
//  // normal function body here
//  }
//
//  It is very important that this macro appear in each
//  function, prior to any calls into MFC.  This means that
//  it must appear as the first statement within the
//  function, even before any object variable declarations
//  as their constructors may generate calls into the MFC
//  DLL.
//
//  Please see MFC Technical Notes 33 and 58 for additional
//  details.

Т.е. надо в начале каждой экспортируемой функции добавить AFX_MANAGE_STATE(AfxGetStaticModuleState()); - и будет тебе щастье. smile


--------------------
Почему же, ё-моё, ты нигде не пишешь "ё"?
--------------------
Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) 
PM MAIL WWW ICQ   Вверх
Smerch
Дата 10.10.2005, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 10.10.2005

Репутация: нет
Всего: нет



Спасибо Константин, все работает!!! smile smile smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0420 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.