Здраствуйте.
У меня возникла проблема. Есть приложение (содержит одну форму типа 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'а. Подскажите, плиз, где я ошибся, как это исправить, и можно ли вообще.