Есть главное MDI-приложение, которое вызывает дочерние MDI-формы из разных DLL-ек. Все формы наследуются от одного и того же класса:
{PluginForm.h}
#ifndef PluginFormH
#define PluginFormH
#include <Forms.hpp>
class TPluginForm: public TForm
{
public:
__fastcall TPluginForm(TComponent* Owner);
virtual __fastcall int SendRequest(void) = 0;
};
#endif
{PluginForm.cpp}
#include "PluginForm.h"
__fastcall TPluginForm::TPluginForm(TComponent* Owner): TForm(Owner)
{
}
и пока что одна форма:
{Form_MB_06.h}
...
class TfmMB_06: public TPluginForm
{
...
public: // User declarations
__fastcall TfmMB_06(TComponent* Owner);
...
};
extern PACKAGE TfmMB_06 *fmMB_06;
#endif
{Form_MB_06.cpp}
...
TfmMB_06 *fmMB_06;
__fastcall TfmMB_06::TfmMB_06(TComponent* Owner)
: TPluginForm(Owner)
{
}
...
...и наконец сам модуль DLL:
{MB_06.h}
...
extern "C" void MB_06_DLL ShowMDIChildForm(int mainApp);
...
{MB_06.cpp}
#pragma hdrstop
#include "_06_WSR.h"
#include "Form_MB_06.h"
USEFORM("Form_MB_06.cpp", fmMB_06);
TApplication *DLLApp = NULL;
...
void ShowMDIChildForm(int mainApp)
{
if (!DLLApp)
{
DLLApp = Application;
Application = (TApplication*)mainApp;
}
fmMB_06 = new TfmMB_06(Application->MainForm);
fmMB_06->Show();
}
...
{MB_06.def}
...
ShowMDIChildForm @4 ; ShowMDIChildForm
___CPPdebugHook @7 ; ___CPPdebugHook
_fmMB_06 @8 ; _fmMB_06
...
DLL-ка динамически загружается в приложении. Причем вызов функции, возвращающей число, проходит прекрасно.
Однако: При вызове функции ShowMDIChildForm((int)Application)
выдается исключение EOSError.
Может кто встречался с подобной проблемой. Подскажите, плиз. Заранее благодарен.
P.S. По данной теме выполнялся поиск, правда безуспешно

.
MDI-формы вообще очень криво экспортируются из ДЛЛ.
Я видел какие-то рекомендации по этому делу — замена объектов Application
(у тебя он заменён) и Screen из ЕХЕ в ДЛЛ, может ещё что-то,
но это всё равно от всех глюков не спасёт.
Разработчики явно не расчитывали на экспорт MDI-форм (в отличие от обычных форм) из ДЛЛ.
И как ты селёдку щёткой не мой, ... в общем, ничего путного не получится.
Попробуй выделить базовый класс MDI-формы в отдельный пакет, и
скомпилировать с рантайм-пакетами как ЕХЕ, так и ДЛЛ — может, полегчает.
В общем получилось все как надо. Я создал новый DLL-проект и поключил к нему форму. Все заработало

.
А>но это всё равно от всех глюков не спасёт.
надеюсь, что все-таки глюков не будет. Все вроде правильно получилось.
А>Попробуй выделить базовый класс MDI-формы в отдельный пакет, и
А>скомпилировать с рантайм-пакетами как ЕХЕ, так и ДЛЛ — может, полегчает.
Благодарю, но думаю, что пока этого не прийдется делать.