MDIChild + DLL
От: Blade  
Дата: 30.05.03 14:12
Оценка:
Здраствуйте.
У меня возникла проблема. Есть приложение (содержит одну форму типа MDIForm), которое использует функцию (описана в DLL) создания и вывода на экран формы типа MDIChild, хранящейся в DLL. Вот код:

Код функции в DLL:
...
TApplication* a_DLLApplication = NULL;
...
void __stdcall DLL_EXP f_ChildWindow(TApplication* a_Calling)
{
  if (!a_DLLApplication && a_Calling)
  {
    a_DLLApplication = Application;
    Application = a_Calling;
  }

  frm_Child = new Tfrm_Child(Application);

  frm_Child->Show();
}


Код DllEntryPoint
BOOL WINAPI DllEntryPoint(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
  if (fwdreason == DLL_PROCESS_DETACH && a_DLLApplication)
    Application = a_DLLApplication;

  return 1;
}


Обработчик OnClose главной формы приложения:
void __fastcall Tfrm_Main::FormClose(TObject *Sender, TCloseAction &Action)
{
  while(MDIChildCount)
    MDIChildren[0]->Free();

  if (h_Dll)
    FreeLibrary(h_Dll);
}


А теперь собственно проблема, заключающаяся в обработчике OnCLose... Если поставить галочки "Use dynamic RTL" и "Build with runtima packages" в настройках проектов, то все работает просто замечательно, т.е. MDIChildCount содержит число созданных дочерних окон и приложение нормально завершается, если не закрыть предварительно эти дочерние окна. Если галочки снять, то MDIChildCount всегда равно 0 и приложение не завершается корректно, если предварительно на закрыть все дочерние окна. Вылетает просто офигенное исключение. Дело в том, что первый вариант мне не подходит, т.к. прога будет юзаться на машине без Builder'а. Подскажите, плиз, где я ошибся, как это исправить, и можно ли вообще.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.