Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.16;
Скачать: CL | DM;

Вниз

Так всё-таки: как канонически правильно передавать объекты   Найти похожие ветки 

 
Ega23 ©   (2007-11-15 16:02) [0]

в dll?
Допсутим, надо передать в dll ADOConnection.


 
Сергей М. ©   (2007-11-15 16:04) [1]

О "канонах" разработчика какой платформы разработки идет речь ?


 
Ega23 ©   (2007-11-15 16:06) [2]

Windows, delphi 7.
Dll также используется исключительно из D7. (т.е. никаких других стредств разработки)


 
Юрий Зотов ©   (2007-11-15 16:08) [3]

> Ega23 ©   (15.11.07 16:06) [2]

> Dll также используется исключительно из D7. (т.е. никаких других
> стредств разработки)

Тогда компилячь exe и все dll с включенными run-time пакетами и ни о чем не беспокойся.


 
Сергей М. ©   (2007-11-15 16:09) [4]


> Dll также используется исключительно из D7


Пара "канонических" контрвопросов

1. Нахрена нужна такая dll ?
2. Если не нахрена, то почему не bpl ?


 
Черный Шаман   (2007-11-15 16:10) [5]


> Ega23 ©   (15.11.07 16:06) [2]
>
> Windows, delphi 7.
> Dll также используется исключительно из D7. (т.е. никаких
> других стредств разработки)


Тогда все равно как передавать, в равно ссылка на адрес памяти. Главное чтобы тип ADOConnection в программе и dll явно совпадал по коду.


 
Сергей М. ©   (2007-11-15 16:13) [6]


> Ega23


"Каноны" здесь просты:

Модули, содержащие вызывающий и вызываемый код, должны использовать один и тот же экз-р RTL


 
Ega23 ©   (2007-11-15 16:17) [7]


> 2. Если не нахрена, то почему не bpl ?


Т.е. New Package, инсталлировать, а уже exe собирать с ним, так?
Вопрос тогда такой: а exe обязательно с rut-time пакетами в данной ситуации компилять, или нет?
Насколько я понимаю - не обязательно (но может я что-то не так понимаю)?


 
Сергей М. ©   (2007-11-15 16:20) [8]

Компиляция с рантайм-пакетами дает соблюдение главного "канона" - см.[6]


 
Reindeer Moss Eater ©   (2007-11-15 16:21) [9]

А нету в адо что-нибудь типа глобального дефолтного коннекшена для процесса? Тогда и передавать ничего не надо.


 
KSergey ©   (2007-11-15 16:21) [10]

> Черный Шаман   (15.11.07 16:10) [5]
> Тогда все равно как передавать, в равно ссылка на адрес памяти.

Это да.
Однако не криво бы еще общий менеджер памяти иметь.
Впрочем, в частных случаях - вполне может и проканает, особенно учитывая, сто TADOConnection  - лишь обертка над COM-вызовами.

К стати, если опять же о частностях говорить - то видимо надо либо вообще все в проскость COM-интерфейсов в DLL переводить, либо передавать если не ошибаюсь TADOConnection.ConnectionObject и в dll порождать экземпляр дельфового объекта TADOConnection с насильным присвоением ему этого TADOConnection.ConnectionObject.
Как - не скажу, но вроде где-то это мне попадалось или по коду вроде видел, что вроде можно туды его подпихнуть.


 
KSergey ©   (2007-11-15 16:23) [11]

> Ega23 ©   (15.11.07 16:17) [7]
> Вопрос тогда такой: а exe обязательно с rut-time пакетами
> в данной ситуации компилять, или нет?

Обязательно, ибо только это дает, как верно указано, соблюдение "главного канона" [6]


 
clickmaker ©   (2007-11-15 16:23) [12]


> TADOConnection с насильным присвоением ему этого TADOConnection.ConnectionObject

так и коннекшн стринг можно передавать в виде pchar


 
Ega23 ©   (2007-11-15 16:23) [13]


> Тогда все равно как передавать, в равно ссылка на адрес
> памяти. Главное чтобы тип ADOConnection в программе и dll
> явно совпадал по коду.


ADOConnection - это я для примера. Я же в Dll могу передать TMyADOConnection, который, хоть и в принципе, потомок, но всё-таки другой. И тут уже адреса будут совсем другие, насколько я понимаю.


 
Reindeer Moss Eater ©   (2007-11-15 16:25) [14]

так и коннекшн стринг можно передавать в виде pchar

Много dll - много сессий?


 
KSergey ©   (2007-11-15 16:27) [15]

> Ega23 ©   (15.11.07 16:23) [13]
> ADOConnection - это я для примера. Я же в Dll могу передать
> TMyADOConnection, который, хоть и в принципе, потомок, но
> всё-таки другой. И тут уже адреса будут совсем другие,

Вооще-то если вызываемый метод будет пользовать только в рамках базового класса - то все отлично поканает. На том и стоим.
Только не стоит все же без общего менедрера памяти. Огребешь всяких дурацких багов - страшное дело.
К стати, run-time пакеты - они только по началу страшны :)


 
KSergey ©   (2007-11-15 16:28) [16]

> clickmaker ©   (15.11.07 16:23) [12]
> так и коннекшн стринг можно передавать в виде pchar

Да, но это все же будет физически второй коннекшн, я думаю. Хотя адошка может и закешировать все по страшному. ADO.NET - точно бы закешировала, стопудово.


 
Черный Шаман   (2007-11-15 16:57) [17]


>
> Ega23 ©   (15.11.07 16:02)
>
> в dll?
> Допсутим, надо передать в dll ADOConnection.


А может проще передавать строку подключения через PAnsiChar/PwideChar


 
clickmaker ©   (2007-11-15 17:30) [18]


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

сериализация. XML
:)



Страницы: 1 вся ветка

Текущий архив: 2007.12.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.042 c
2-1195657827
webpauk
2007-11-21 18:10
2007.12.16
Наследование


2-1195558114
San1
2007-11-20 14:28
2007.12.16
формат числа


1-1190823390
Игорь_З
2007-09-26 20:16
2007.12.16
Мерцание ListView


15-1195240751
Bombaster
2007-11-16 22:19
2007.12.16
Чтение содержимого файла в массив


8-1170672615
bobus
2007-02-05 13:50
2007.12.16
Картинки для панели инструментов