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

 
Что происходит при передаче TpFIBDatabase* ?, Передача данных в dll
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.



Вернуться в Работа с базами данных в C++Builder