Admin |
Отправлено: 23.06.2004, 13:33 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Есть главная exe форма с компонетом базы данных TpFIBDatabase
Есть динамически цепляемая dll с компонентами TpFIBDataSet.
Из exe формы происходит соединение с базой данных.
Как передать указатель в dll на pFIBDatabase ?
(для этих TpFIBDataSet)
Exe форма ничего не знает о Dll, только должна передать
туда указатель на pFIBDatabase. Dll ничего не должна знать
об exe, только получить от нее указатель на базу
(возможно и на Transaction тоже)
---------------
Пытался сделать так:
в Exe
CODE |
HINSTANCE hDll = LoadLibrary("myDll.dll");
if(!hDll) { ShowMessage("Error !"); return; }
typedef int __declspec(dllimport) MeasType(TpFIBDatabase* );
MeasType *Measuring = (MeasType *)GetProcAddress(hDll, "_Measuring");
int Res = Measuring(DataModule->DBase);
|
в Dll
(создается форма FMeasuring)
CODE |
extern "C" int __declspec(dllexport) Measuring(TpFIBDatabase* );
int Measuring(TpFIBDatabase* pDBase)
{
TFMeasuring* myForm = new TFMeasuring(Application);
myForm->ShowForm(pDBase); // передаю указатель
myForm->Show();
return 1;
}
|
в создаваемой dll форме TFMeasuring:
CODE |
void __fastcall TFMeasuring::ShowForm(TpFIBDatabase *pDBase)
{
DBase = pDBase;
}
|
Компонент TpFIBDatabase есть на этой форме,
CODE |
class TFMeasuring : public TForm
{
__published: // IDE-managed Components
TpFIBDatabase *DBase;
...
|
вот ему и присваиваю указатель на компонент TpFIBDatabase
из Exe-формы.
При запуске не происходит присваивания указателя ?
TpFIBDatabase
Выдает ошибку: "FMeasuring.DBase — база данных не открыта."
то есть я так понял не произошло присвоение
так как DBase на Exe форме открыт и таблицы с данными показывает.
Отредактировано Admin — 23/06/2004, 14:43
|
|
Admin |
Отправлено: 23.06.2004, 21:34 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Просто передать указатель — все работает,
но хотелось бы присвоить один TFIBDatabase* другому
|
|
olegenty |
Отправлено: 24.06.2004, 07:10 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
1. Assign не помогает?
2. Раньше, по необходимости, работал одним коннектом с двумя компонентами БД: TpFIBDatabase и TIBDatabase, посредством AttachmentID, но у TpFIBDatabase не нашёл метода заатачиться...
|
|
Admin |
Отправлено: 24.06.2004, 20:57 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
1 Assign не работает, говорит:
Cannot assign ...
----
Пришлось работать с указателем, просто нельзя создать объекты
полей (в FieldsEditor) без подключения к базе, а они мне нужны,
пришлось временно кидать на форму компонент pFIBDatabase
и pFIBTransaction, подключаться к базе, создавать объекты полей,
после чего отключаться от базы и удалять с формы эти
pFIBDatabase и pFIBTransaction.
|
|