1-й способ
Запросто. Если с базами работаешь, то нужно передать параметром указатель на
базу, а затем, перед показом формы произвести переприсвоение используемых
базовых компонентов переданному указателю.
//--------------------------------------------------------------------------
#include <vcl.h>
#include <windows.h>
#include "Unit1.h"
#pragma hdrstop
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*
lpReserved)
{
return 1;
}
//--------------------------------------------------------------------------
extern "C" int __declspec (dllexport) WINAPI Login()
{
try
{
if(BringWindowToTop(FindWindow("TfrmLogin","Вход в систему"))!=0)
return 0;
frmLogon=new TfrmLogon(NULL); // Создаем форму.
frmLogon->ShowModal(); /* Открываем как модальную. Можно, в принципе, и
как обычную с помощью Show();*/
delete frmLogon; /* А вот это не обязательно. Можно в событии Close
прописать освобождать память. последенее время я обхожусь без delete*/
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 1;
}
Cолошенко Дмитрий
2-й способ
Пример форма Filtr в dll. Делаешь проект dll. Создаешь там форм сколько
хочешь, только в хедере dll:
#ifdef __BUILDING_THE_DLL
#define ET __export
#else
#define ET __import
#endif
__BUILDING_THE_DLL определяется в опциях компилятора проекта dll
(conditional defines). В программе гду dll используется не нужно.
Форма в хедере объяавляется так:
class ET TFiltr;
class TFiltr : public TForm
{
__published: // IDE-managed Components
TPanel *Panel1;
TComboBox *cb_ident;
...
};
extern PACKAGE TFiltr *Filtr;
и т.д.
В программе вызова, для создания формы рекомендую стандартный метод, что
можно найти в WinMain.
Application->CreateForm(__classid(TFiltr), &Filtr);
Filtr->Tag = (int)&Filtr;
Filtr->Show();
Таg использую для хранения адреса указателя формы. Когда форма закрывается,
память освобождается (Action = caFree; в FormClose), однако указатель не
становится NULL, что затрудняет блокировку от вторичного запуска. Hо в форме
по событию onDestroy я обнуляю этот указатель и все тип-том.
void __fastcall TFiltr::FormDestroy(TObject *Sender)
{
int *addr = (int*)Tag; /* нужно перед полной ликвидацией обнулить
указатель на форме вызова */
*addr=NULL;
}
Alexander Koryagin
Предыдущий вопрос
|
|
Следующий вопрос
источник
by jenyok
|