Конференция "Прочее" » Как в Dll работать с набором данных ?
 
  • desc (16.09.08 14:59) [0]
    Windows XP Professional, Delphi 7, MS SQL Server 2005

    Как в Dll работать с набором данных ? Нужно реализовать форму карточку в программе, ну хотелось бы реализовать плагином dll… Что нужно передавать в адресное пространство dll, набор данных или указатель на него или указатель на соединение ?...

    Спасибо.
  • Правильный$Вася (16.09.08 15:09) [1]
    ничего не понятно
    используй bpl
  • Vlad Oshin © (16.09.08 15:15) [2]

    > указатель на соединение

    так делаю

    +

    > используй bpl
  • DrPass © (16.09.08 15:16) [3]

    > используй bpl

    +1


    > Нужно реализовать форму карточку в программе, ну хотелось
    > бы реализовать плагином dll

    Крайне неудачная идея
  • Правильный$Вася (16.09.08 15:26) [4]
    если карточка - элемент основной функциональности, то плагин тут как зайцу пятая нога
  • MsGuns © (16.09.08 16:05) [5]
    Насколько я понимаю, плагины используются как достаточно автономные прибамбасы к интерфейсам, часто нифига не знающие о функционале того окна, к которому прицепляются
  • clickmaker © (16.09.08 16:40) [6]
    > Что нужно передавать в адресное пространство dll

    и плагин и экзе на дельфи?
  • Труп Васи Доброго © (16.09.08 16:55) [7]

    > если карточка - элемент основной функциональности, то плагин
    > тут как зайцу пятая нога

    Ну не согласен. Я вот тоже так делал, данные об элементах сети вносились в карточку, вызываемую из DLL. Это надо было потому, что эти данные нужно было вносить из разных приложений. Так нафига было этот процесс дублировать в каждой программе?
  • Правильный$Вася (16.09.08 17:01) [8]

    > Это надо было потому, что эти данные нужно было вносить
    > из разных приложений.

    тогда это не плагин вовсе
    по крайней мере в моем понимании
  • desc (17.09.08 09:08) [9]

    > clickmaker ©   (16.09.08 16:40) [6]
    > > Что нужно передавать в адресное пространство dll
    >
    > и плагин и экзе на дельфи?

    да на delphi
  • Труп Васи Доброго © (17.09.08 09:13) [10]
    Да, это можно делать в DLL на Дельфи ибо я так делал и работало замечательно. По крайней мере с Жар-птицей работало.
  • desc (17.09.08 09:19) [11]
    Еще хотел сделать универсальную форму справочник, и использовать ее в различных программах, потому и остановился именно на dll а не на bpl...
  • tesseract © (17.09.08 10:20) [12]

    > desc   (17.09.08 09:19) [11]


    ActiveX + ISpecifyPropertyPage
  • KSergey © (17.09.08 10:39) [13]
    > desc   (17.09.08 09:19) [11]
    > ее в различных программах, потому и остановился именно на
    > dll а не на bpl...

    А обоснование есть этого выбора? А на сколько различны эти "различные программы"? Все на дельфи или есть на других языках?

    Если нужна супер-пупер универсальная и именно и только DLL - то вариант только один: она должна уметь самостоятельно коннектиться к требуемой БД и совершать с ней все требуемые операции. И лишь одна экспортируемая функция Start(), в которую передать логин/пароль. Только есть подозрение, что это не правильная затея.
    К стати, никто не запрещает к 2 проектам подключить одни и те же (буквально) файлы с формой. Т.е. у двух (и более) проектов будет использоваться один и тот же файл исходных текстов, что, поанятно, выдвигает некоторые требования к общности того, на что данная форма(ы) буде(у)т ссылаться в разных проектах. Но мне такой вариант ге-то даже видится более предпочтительным и простым.
  • tesseract © (17.09.08 10:49) [14]

    > Если нужна супер-пупер универсальная и именно и только DLL
    > - то вариант только один:


    Вариантов тьма. COM или например собственная отрисовка данных через запрос структуры по ODBC.
  • KSergey © (17.09.08 10:55) [15]
    > tesseract ©   (17.09.08 10:49) [14]
    > Вариантов тьма. COM или например собственная отрисовка данных
    > через запрос структуры по ODBC.

    Извратиться по части технологий взаимодействия можно очень по разному, понятно. Равно как и интерфейс супер развесистый этого "плагина" замудрячить тоже.
    Только зачем?
  • desc (17.09.08 11:01) [16]
    Вопрос не в ветку, но всеже: Когда я загружаю dll (LoadLibrary), то получаю Handle на эту dll, т.е. я могу посмотреть его: ShowMessage(IntToStr(FDLL)), где FDLL это Handle моей загруженной dll, а как из сомой длл получить этот Handle, т.е. где я его могу видеть, это будет Handle, Self.Handle, Application.Handle, или же что-то другое ?...
  • Труп Васи Доброго © (17.09.08 11:05) [17]

    > Если нужна супер-пупер универсальная и именно и только DLL
    > - то вариант только один: она должна уметь самостоятельно
    > коннектиться к требуемой БД и совершать с ней все требуемые
    > операции.

    Во во во!!! Именно так у меня и было сделано. Ей при вызове передавалась строка коннекта и... вроде бы всё.
  • clickmaker © (17.09.08 11:05) [18]
    > [16] desc   (17.09.08 11:01)

    GetModuleHandle(PathToDll)
  • KSergey © (17.09.08 11:19) [19]
    > clickmaker ©   (17.09.08 11:05) [18]

    GetModuleHandle(nil) исли из dll-ки же и получаем (если не вру, читать хел лень).
  • desc (17.09.08 14:54) [20]
    С бпл вообще не работал, где можно почитать ? спс.
  • clickmaker © (17.09.08 15:28) [21]
    > где можно почитать ?

    Delphi Help -> Index -> packages
  • ANB (18.09.08 09:41) [22]

    > С бпл вообще не работал, где можно почитать ? спс.

    Если хочешь работать с объектами основного приложения из бпл/длл, то очень рекомендуется включить галку "компилять с рантайм пакетами". Со всеми вытекающими.
  • desc (18.09.08 14:09) [23]
    Как передать указатель на соединение в dll, и присвоить в dll самой соединение… (ADOQuery1.Connection :=) ?
  • KSergey © (18.09.08 14:20) [24]
    ему говорят как надо делать, а он снова своё... сам по граблям хочет идти...

    ну так и передавай ADOConnection1, его и присваивай, в чем беда-то? Только этот путь порочен
  • desc (18.09.08 14:28) [25]

    > KSergey ©   (18.09.08 14:20) [24]

    Да наверное остановлюсь на bpl, смысл в том что в программе будет куча форм, которая и половине не нужна, поэтому хотелось вызывать именно плагины и именно динамически...

    Не понятно в чем собственно грабли... Сорри, за тупость просто я с этими плагинами не когда не работал, а повидемому начинать придется...

    Спасибо.
  • desc (18.09.08 14:36) [26]
    Тогда еще вопрос:
    Были ли случаи когда вам приходилось использовать именно dll, и в каких случаях в использовали свои/чужие dll ?
  • KSergey © (18.09.08 15:07) [27]
    Ну про чужие dll какой тут смысл говорить? Они все равно как данность (хотя и сталкивался с dll, где авторы ничего кроме дельфи не польдовали, а потому выдавать наружу string дельфийский считали нормальным; у них даже одна из функций string возвращала из dll).

    Свою dll я когда-то так же вот сделал с типа надором форм/функционала, который (функционал) должен был быть доступен в нескольких приложениях. Потому и пишу про все это, что нахлебался и понял, что путь этот никаких особенных бонусов не приносит, один геморой (особенно попытки встроить формы этой DLL в хост-приложение).

    Только я не пойму от чего вы пугаетесь свалить много форм в оно приложение? Ну и пусть оно себе там лежит, не надо - не будуи исользовать, вот и все. Или хочется продавать ферсии с различным функционалом и хочется доп. фонкционал непременно очень вырезать? Так и это делается ключем шифрованным - да и все. Врятли кто-то поелезет особенно глубоко копать вашу софтину, не надо себе льстить :)
  • KSergey © (18.09.08 15:08) [28]
    Да, и эта dll ка краз бодлны была ходить к MS SQL сервер и как раз через ADO.
    Нет, оно работает и до сих пор, но я понял, что это неудачное решение :)
  • desc (18.09.08 16:01) [29]

    > KSergey ©   (18.09.08 15:08) [28]

    Так какого х..на извеняюсь dll использует Microsoft ?...
    И решает ли эти все проблемы .net ?
  • clickmaker © (18.09.08 16:06) [30]
    > [26] desc   (18.09.08 14:36)
    > Тогда еще вопрос:
    > Были ли случаи когда вам приходилось использовать именно
    > dll, и в каких случаях в использовали свои/чужие dll ?

    если и длл и экзе написаны на одной версии Дельфи и собраны с одним набором рантайм пакетов, то, в принципе, можно передавать в длл указатель. Благо адресное пространство одно.
    Правда, если в длл планируется юзать формы, то надо заменить там Screen и Application на переданные из экзе.
    Если длл написана на чем-то другом, то обмениваться можно только независимыми от среды разработки типами данных (PChar, Int etc)
  • KSergey © (18.09.08 16:43) [31]
    > desc   (18.09.08 16:01) [29]
    > Так какого х..на извеняюсь dll использует Microsoft ?...

    Она им пользуется ровно тем органом, что четко понимает, как с ними надо правильно работать и как правильно разносить логику приложений с учетом используемых сред разработки.
    Если dll-ка не показывает из себя формы - то с ней и в дельфи нет проблем. Если показывает - то некоторые моменты применительно именно к "заморочкам" дельфи clickmaker уже указал.

    И .net тут совсем не при чем. Впрочем, .net реализацию дельфи я не видел вообще, так что предметно тут сказать ничего не могу.

    Короче, мы давно ведем тут беспредметную беседу.
    Вы уже попробуйте сделать наконец-то - и многие вопросы, думаю, прояснятся.
  • KSergey © (18.09.08 16:46) [32]
    "то с ней и в дельфи нет проблем."
    Ну точнее сказать их можно нивелировать более-менее, но очень все просто становится только если мы не передаем меду dll и приложением каких-либо дельфийских контролов вообще.
    Чтобы все без проблем было вообще прозрачно - надо пользовать bpl, которые есть те же dll но с некоторым доп. функционалом, поддерживаемым дельфями автоматически.
  • KSergey © (18.09.08 16:46) [33]
    К стати, я правильно понимаю, что в случае сборки с run-time пакетами смешивать версии дельфи все равно нельзя никак?
  • ANB (18.09.08 17:45) [34]

    > К стати, я правильно понимаю, что в случае сборки с run-
    > time пакетами смешивать версии дельфи все равно нельзя никак?
    >

    Именно.
 
Конференция "Прочее" » Как в Dll работать с набором данных ?
Есть новые Нет новых   [134442   +14][b:0][p:0.001]