Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не соображу, что за ошибка...


User1 ©   (2008-05-12 09:15:00) 

Есть dll, в которой находится форма с Grid- ом, на форме также находится DataSource.

У этого DataSource есть не без известное свойство DataSet.

Так вот: Все наборы данных находятся на главной форме. При вызове dll мы передаем ей Application главной формы, сохраняем ее App, передаю DataSet следующим образом:

В dll:

…
Type
 PDataSet = ^TDataSet;
…
Procedure Run(ADataSet: PDataSet);
Begin
 fHandBook = TfHandBook.Create(Application, ADataSet^);
End;
Где:
Constructor TfHandBook.Create(AOwner: TApplication, ADataSet: TDataSet);
Begin
 Inherited Create(AOwner);
 Ds.DataSet := ADataSet;
End;

Procedure …..FormCreate(Sender: …..);
Begin
 If not ds.DataSet.Active then
   Ds.DataSet.Open;
End;


В главной форме:

…
Type
 PDataSet = ^TDataSet;
…
Var
 P: PDataSet;
…
Initialize(Integer(Application)); //Инициализируем dll;
P^ := ADODataSet1;
Create(P); //Передаем DataSet…
…


1. Если ADOQuery1 закрыт. Форма загружается но на гриде не появляются данные. Через время. Ошибка.
2. Если ADOQuery1 открыт первоначально. Форма загружается на гриде появляются данные. Если мы начнем перемещать форму, или кликнем по гриду, опять ошибка.
3. Навигатор перемещает курсор, но через время опять ошибка !!!.....
Собственно вопрос:

Как правильно работать с dll которой передается DataSet ?


Amoeba   (2008-05-12 11:42:00) [1]


> Как правильно работать с dll которой передается DataSet
> ?
>

Дело в том, что одноименные классы в DLL и host-приложении оказываются на деле разными, т.к. не будут иметь общих RTTI и VMT.
Проблем не возникнет только если приложение и DLL компилируются с пакетами.


Сергей М.   (2008-05-12 10:51:00) [2]


> с чем всеже связана такая ошибка


С разными экземплярами RTL.
Читай всео пакетах времени выполнения.

И вообще - гдеподробная инф-ция об ошибке ?


> Адресные пространства DLL и приложения ?


Оно едино.


> если передать полностью объект


как это "полностью" ?
Это еще надо умудриться передавать объект "частями")


User1   (2008-05-12 10:36:00) [3]

Create в том смысле что создается форма. Учту Run :o)

Procedure Run(ADataSet: PDataSet);

Procedure Run(ADataSet: Point); ?

И с чем всеже связана такая ошибка. Адресные пространства DLL и приложения ?

А если передать полностью объект ? TDataSet ???

И есть ли у кого рабочие примеры ?

Заранее спасибо !


Сергей М.   (2008-05-12 10:27:00) [4]


> Initialize( Integer(Application))


К чему эти пляски с бубном вокруг Application ?


> Create(P)


Что за Create ?
> Type
>  PDataSet = ^TDataSet;
> …
> Procedure Run(ADataSet: PDataSet);


Зачем передавать указатель на указатель ?

Тип TDataSet и так уже являет собой указатель.


Сергей М.   (2008-05-12 10:17:00) [5]

см. всекасаемое опции Build With Run-Time Packages


User1   (2008-05-12 10:11:00) [6]

Кто-то сталкивался с подобными вопросами ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо