C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
MDI form n dll
Zakhar
  Отправлено: 18.11.2003, 07:28


Ученик-кочегар

Группа: Участник
Сообщений: 10



Народ может кто поможет разобратся в чем проблема.
Есть MDI форма Form1 и MDIChild Форма2.
Все формы находятся в dll. На форме1 располагается Button1 с
помощью которого вызываеться форма2

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TForm2 *Child = new TForm2(0);
}

в dll записана функция вызова формы1

extern "C" void __export ShowMDI()
{
TForm1* Form1;
Form1 = new TForm1(Application);
Form1->Show()
}

В програме дллку вызываю функцией


void __fastcall TMainForm::Button1Click(TObject *Sender)
{
void (__stdcall *ShowMDI)();
HINSTANCE dllp = LoadLibrary("MDIForm.dll");
ShowMDI= (void(__stdcall *) ())
GetProcAddress(dllp, "_ShowMDI");
ShowMDI();

}

После вызова функции загружается форма1 но после нажатия на Button1
для отображения формы2 возникает ошибка No MDI forms are currently active.

Может кто знает где что нужно прописать чтобы Форма2 отображалась в Форме1.
Заранее спасибо.

Отредактировано Zakhar — 18/11/2003, 08:34
Anry
Отправлено: 18.11.2003, 08:57


Дежурный стрелочник

Группа: Участник
Сообщений: 56



А зачем так сложно — помещать MDI-форму в dll. Для работы с MDI-формами из dll нужны более хитрые методы работы. Как раз такая проблема у тебя и возникла — дочерняя форма не может найти главную. Могу посоветовать использовать bpl. Своего рода тоже dll только более родная для Builder'а. Гибкости конечно меньше, зато проблем будет меньше. В обработчике события OnClose формы не забывай ее удалять из памяти (а то будет материться типа Access violation).

Вернуться в Вопросы программирования в C++Builder