Как вытащить из dll форму?
#include "Module1.h"
typedef TFormModule1(*MODULE1);
MODULE1 *Module1;
................
Module1=(MODULE1)GetProcAddress(gLib,"_FormMain");
if(Module1==NULL){ ShowMessage("Module1 not loaded");return;}
если написать: Module1.Show();
компилятор ругается
В чем проблема?
Создал в Builder'е проект DLL Wizard, запихнул туда форму. В программе цепляю, вроде цепляется, но как ее показать не знаю.
#include "Module1.h"
typedef TFormModule1(*MODULE1);
MODULE1 *Module1;
................
Module1=(MODULE1)GetProcAddress(gLib,"_FormMain");
if(Module1==NULL){ ShowMessage("Module1 not loaded");return;}
если написать: Module1.Show();
компилятор ругается
В чем проблема?
У меня в dll есть специальная функция которая эту форму создает:
HWND ShowDllForm(AnsiString &Capt, void *AC)
{
if(Application->MainForm->Menu->Items->Find("Окна")->Find(Capt))
{
ShowWindow(FindWindow("TfrmZayaOfLeasing",Capt.c_str()),SW_SHOW);
SetForegroundWindow(FindWindow("TfrmZayaOfLeasing",Capt.c_str()));
return 0;
}
else{
TfrmZayaOfLeasing *SpecMTO = new TfrmZayaOfLeasing(Application, AC, Capt);
SpecMTO->Show();
return SpecMTO->Handle;
}
}
Вот из хоста то я ее и вызываю после загрузки dll:
void __fastcall TfrmMain::DllMenuClick(TObject * Sender)
{
typedef HWND (__import *Sh)(AnsiString &Capt, void *Conn);
Sh ShowMy;
HINSTANCE Dll;
for (int i = 0; i < Dlls->Count; i++)
{
Dll = LoadLibrary(Dlls->Strings.c_str());
if(Dll != NULL)
{
ShowMy = (Sh)GetProcAddress(Dll,"_ShowDllForm");
AnsiString B = ((TMenuItem*)Sender)->Caption;
HWND in;
ShowMy(B,MTODm->ADOConnection1);
break;
}
}
}
В *.h файле DLL пишу
extern "C" void __declspec(dllexport) EXE_REPORT(void *BASE, char *patch_report);
в *.cpp фале пишу
//---------------------------------------------------------------------------
#include "report_dll.h"
#include <vcl.h>
#include <windows.h>
#include <IBDatabase.hpp>
#include <IBCustomDataSet.hpp>
#include <memory>
#include "MAIN_REPORT_FORM.h"\\вот форму подцепил
#pragma hdrstop
using namespace std;
//---------------------------------------------------------------------------
//DllMain
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
void EXE_REPORT(void *BASE, char *patch_report)
{
auto_ptr<TR_MAIN> R_MAIN(new TR_MAIN(0));
//вот форму создал
R_MAIN->IBDatabase1 = (TIBDatabase *) BASE;
R_MAIN->IBTransaction1->DefaultDatabase = R_MAIN->IBDatabase1;
R_MAIN->IBSQL1->Database = R_MAIN->IBDatabase1;
R_MAIN->IBDataSet1->Database = R_MAIN->IBDatabase1;
R_MAIN->frDBDataSet1->DataSet = R_MAIN->IBDataSet1;
R_MAIN->frReport1->Dataset = R_MAIN->frDBDataSet1;
R_MAIN->patch = patch_report;
R_MAIN->ShowModal();//вот ее показал
}
//---------------------------------------------------------------------------