-
Windows XP Professional, Delphi 7, MS SQL Server 2005
Как в Dll работать с набором данных ? Нужно реализовать форму карточку в программе, ну хотелось бы реализовать плагином dll… Что нужно передавать в адресное пространство dll, набор данных или указатель на него или указатель на соединение ?...
Спасибо.
-
ничего не понятно
используй bpl
-
> указатель на соединение
так делаю
+
> используй bpl
-
> используй bpl
+1
> Нужно реализовать форму карточку в программе, ну хотелось
> бы реализовать плагином dll
Крайне неудачная идея
-
если карточка - элемент основной функциональности, то плагин тут как зайцу пятая нога
-
Насколько я понимаю, плагины используются как достаточно автономные прибамбасы к интерфейсам, часто нифига не знающие о функционале того окна, к которому прицепляются
-
> Что нужно передавать в адресное пространство dll
и плагин и экзе на дельфи?
-
> если карточка - элемент основной функциональности, то плагин
> тут как зайцу пятая нога
Ну не согласен. Я вот тоже так делал, данные об элементах сети вносились в карточку, вызываемую из DLL. Это надо было потому, что эти данные нужно было вносить из разных приложений. Так нафига было этот процесс дублировать в каждой программе?
-
> Это надо было потому, что эти данные нужно было вносить
> из разных приложений.
тогда это не плагин вовсе
по крайней мере в моем понимании
-
> clickmaker © (16.09.08 16:40) [6]
> > Что нужно передавать в адресное пространство dll
>
> и плагин и экзе на дельфи?
да на delphi
-
Да, это можно делать в DLL на Дельфи ибо я так делал и работало замечательно. По крайней мере с Жар-птицей работало.
-
Еще хотел сделать универсальную форму справочник, и использовать ее в различных программах, потому и остановился именно на dll а не на bpl...
-
> desc (17.09.08 09:19) [11]
ActiveX + ISpecifyPropertyPage
-
> desc (17.09.08 09:19) [11]
> ее в различных программах, потому и остановился именно на
> dll а не на bpl...
А обоснование есть этого выбора? А на сколько различны эти "различные программы"? Все на дельфи или есть на других языках?
Если нужна супер-пупер универсальная и именно и только DLL - то вариант только один: она должна уметь самостоятельно коннектиться к требуемой БД и совершать с ней все требуемые операции. И лишь одна экспортируемая функция Start(), в которую передать логин/пароль. Только есть подозрение, что это не правильная затея.
К стати, никто не запрещает к 2 проектам подключить одни и те же (буквально) файлы с формой. Т.е. у двух (и более) проектов будет использоваться один и тот же файл исходных текстов, что, поанятно, выдвигает некоторые требования к общности того, на что данная форма(ы) буде(у)т ссылаться в разных проектах. Но мне такой вариант ге-то даже видится более предпочтительным и простым.
-
> Если нужна супер-пупер универсальная и именно и только DLL
> - то вариант только один:
Вариантов тьма. COM или например собственная отрисовка данных через запрос структуры по ODBC.
-
> tesseract © (17.09.08 10:49) [14]
> Вариантов тьма. COM или например собственная отрисовка данных
> через запрос структуры по ODBC.
Извратиться по части технологий взаимодействия можно очень по разному, понятно. Равно как и интерфейс супер развесистый этого "плагина" замудрячить тоже.
Только зачем?
-
Вопрос не в ветку, но всеже: Когда я загружаю dll (LoadLibrary), то получаю Handle на эту dll, т.е. я могу посмотреть его: ShowMessage(IntToStr(FDLL)), где FDLL это Handle моей загруженной dll, а как из сомой длл получить этот Handle, т.е. где я его могу видеть, это будет Handle, Self.Handle, Application.Handle, или же что-то другое ?...
-
> Если нужна супер-пупер универсальная и именно и только DLL
> - то вариант только один: она должна уметь самостоятельно
> коннектиться к требуемой БД и совершать с ней все требуемые
> операции.
Во во во!!! Именно так у меня и было сделано. Ей при вызове передавалась строка коннекта и... вроде бы всё.
-
> [16] desc (17.09.08 11:01)
GetModuleHandle(PathToDll)
-
> clickmaker © (17.09.08 11:05) [18]
GetModuleHandle(nil) исли из dll-ки же и получаем (если не вру, читать хел лень).
-
С бпл вообще не работал, где можно почитать ? спс.
-
> где можно почитать ?
Delphi Help -> Index -> packages
-
> С бпл вообще не работал, где можно почитать ? спс.
Если хочешь работать с объектами основного приложения из бпл/длл, то очень рекомендуется включить галку "компилять с рантайм пакетами". Со всеми вытекающими.
-
Как передать указатель на соединение в dll, и присвоить в dll самой соединение… (ADOQuery1.Connection :=) ?
-
ему говорят как надо делать, а он снова своё... сам по граблям хочет идти...
ну так и передавай ADOConnection1, его и присваивай, в чем беда-то? Только этот путь порочен
-
> KSergey © (18.09.08 14:20) [24]
Да наверное остановлюсь на bpl, смысл в том что в программе будет куча форм, которая и половине не нужна, поэтому хотелось вызывать именно плагины и именно динамически...
Не понятно в чем собственно грабли... Сорри, за тупость просто я с этими плагинами не когда не работал, а повидемому начинать придется...
Спасибо.
-
Тогда еще вопрос:
Были ли случаи когда вам приходилось использовать именно dll, и в каких случаях в использовали свои/чужие dll ?
-
Ну про чужие dll какой тут смысл говорить? Они все равно как данность (хотя и сталкивался с dll, где авторы ничего кроме дельфи не польдовали, а потому выдавать наружу string дельфийский считали нормальным; у них даже одна из функций string возвращала из dll).
Свою dll я когда-то так же вот сделал с типа надором форм/функционала, который (функционал) должен был быть доступен в нескольких приложениях. Потому и пишу про все это, что нахлебался и понял, что путь этот никаких особенных бонусов не приносит, один геморой (особенно попытки встроить формы этой DLL в хост-приложение).
Только я не пойму от чего вы пугаетесь свалить много форм в оно приложение? Ну и пусть оно себе там лежит, не надо - не будуи исользовать, вот и все. Или хочется продавать ферсии с различным функционалом и хочется доп. фонкционал непременно очень вырезать? Так и это делается ключем шифрованным - да и все. Врятли кто-то поелезет особенно глубоко копать вашу софтину, не надо себе льстить :)
-
Да, и эта dll ка краз бодлны была ходить к MS SQL сервер и как раз через ADO.
Нет, оно работает и до сих пор, но я понял, что это неудачное решение :)
-
> KSergey © (18.09.08 15:08) [28]
Так какого х..на извеняюсь dll использует Microsoft ?...
И решает ли эти все проблемы .net ?
-
> [26] desc (18.09.08 14:36)
> Тогда еще вопрос:
> Были ли случаи когда вам приходилось использовать именно
> dll, и в каких случаях в использовали свои/чужие dll ?
если и длл и экзе написаны на одной версии Дельфи и собраны с одним набором рантайм пакетов, то, в принципе, можно передавать в длл указатель. Благо адресное пространство одно.
Правда, если в длл планируется юзать формы, то надо заменить там Screen и Application на переданные из экзе.
Если длл написана на чем-то другом, то обмениваться можно только независимыми от среды разработки типами данных (PChar, Int etc)
-
> desc (18.09.08 16:01) [29]
> Так какого х..на извеняюсь dll использует Microsoft ?...
Она им пользуется ровно тем органом, что четко понимает, как с ними надо правильно работать и как правильно разносить логику приложений с учетом используемых сред разработки.
Если dll-ка не показывает из себя формы - то с ней и в дельфи нет проблем. Если показывает - то некоторые моменты применительно именно к "заморочкам" дельфи clickmaker уже указал.
И .net тут совсем не при чем. Впрочем, .net реализацию дельфи я не видел вообще, так что предметно тут сказать ничего не могу.
Короче, мы давно ведем тут беспредметную беседу.
Вы уже попробуйте сделать наконец-то - и многие вопросы, думаю, прояснятся.
-
"то с ней и в дельфи нет проблем."
Ну точнее сказать их можно нивелировать более-менее, но очень все просто становится только если мы не передаем меду dll и приложением каких-либо дельфийских контролов вообще.
Чтобы все без проблем было вообще прозрачно - надо пользовать bpl, которые есть те же dll но с некоторым доп. функционалом, поддерживаемым дельфями автоматически.
-
К стати, я правильно понимаю, что в случае сборки с run-time пакетами смешивать версии дельфи все равно нельзя никак?
-
> К стати, я правильно понимаю, что в случае сборки с run-
> time пакетами смешивать версии дельфи все равно нельзя никак?
>
Именно.