![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Экспорт / импорт (dll) функций из класса [D7]
parovoZZ © (2006-06-27 05:35:00)
Страницы: < 1 2 3 4 5 6 7 8 9 10 >
К примеру, запись
exports
TMyClass.myFunc name 'MyFunc';
ошибочна. А как быть?
Leonid Troyanovsky (2006-06-28 20:06:00) [141]
> Шпиён (28.06.06 09:48) [19]
> 1) "Сторонний" (соседнего отдела) скриптовый интерпретатор
> с поддержкой плагинов-расширений (в виде подключаемых dll).
>
> 2) Готовые и отлаженные smpp-компоненты (другой разработчик).
>
> Задача: Создать плагин для реализации "скриптового" smpp-
> клиента.
Чего-то больно много натяжек (нет, чтоб по-простому, на кастрюльках).
Так и хочется послать куда-нибудь в vbs.
И, чтоб другой разработчик подтянулся.
--
Regards, LVT.
Leonid Troyanovsky (2006-06-28 20:00:00) [142]
> Пусик © (28.06.06 11:22) [34]
> Можно. Например, использовать RunDll32.exe для выполнения
> некоторой функции из DLL.
Оная предназначена лишь для вызова функций вполне
определенного прототипа.
Да, собс-но, это не так уж и важно.
--
Regards, LVT.
Leonid Troyanovsky (2006-06-28 19:49:00) [143]
> Adder © (28.06.06 11:04) [30]
> абсолютно разные вещи (imho).
Что сова о пень, что пнем о сову,
все равно, не жить сове.
Если уж на фундаменте exe еще можно построить объектный
мир из необъектных кирпичей, то не стоит это делать в dll,
бо, уж сильно она не самостоятельна.
--
Regards, LVT.
Leonid Troyanovsky (2006-06-28 19:45:00) [144]
> Пусик © (28.06.06 09:33) [17]
> Продолжать список бессмысленно, так спектр возможных задач
> настолько широк, насколько широки вообще потребности в ЛЮБЫХ
> программах.
Дык, вот, если немного поразмышлять о предназначении ООП
и тех же dll, то можно придти к простому выводу, что для
столь неограниченного круга задач нужны именно простые
(а не объектные) типы данных.
Т.е., на входе, на выходе и в нутре.
--
Regards, LVT.
Leonid Troyanovsky (2006-06-28 19:40:00) [145]
> Пусик © (28.06.06 09:33) [17]
> - Класс-наследник TStrings с дополнительными функциями поиска
> файлов, обработки(например, копирования).
> - Специализированные классы-обертки Winsock.
Ой-ой-ой. Т.е., без классов мы уже не можем реализовать
ни работу со строками. ни поиск файлов?
И чего там особо специализированного в оных обертках winsock?
Хочется немного объектов? Изволь. Только нечего их
тащить еще в одну длл. Будьте любезны ложить в exe.
--
Regards, LVT.
Leonid Troyanovsky (2006-06-28 19:34:00) [146]
> Fay © (28.06.06 10:41) [28]
> Ах в этом смысле... 8) Наверное так и нужно было сказать.
Да, хотелось сказать, что они повязаны версией дельфи,
но с утра бывает сложно формулировать мысль.
Хотя, конечно, иногда и вечером тож :)
--
Regards, LVT.
Leonid Troyanovsky (2006-06-28 19:31:00) [147]
> Пусик © (28.06.06 10:56) [29]
> И имеет ценность сама по себе, а не только в составе какой-
> либо отдельной программы.
Dll не имеет никакой самостоятельной ценности, т.е. вне хоста.
Просто, это такая примитивная форма модели клиент-сервер.
> что у нее внутри, еще не означает, что программирование
> кода в DLL должно быть без использования методов ООП.
Я пока не видел аргументов за использование ООП в dll.
(Впрочем, как, собс-но, и обоснований необходимости использования dll).
Допустим даже, что у нас есть доводы за dll.
Как, собс-но, мы должны применить ООП?
Видимо:
1. Создать объект
2. Заполнить его поля некоторыми простых типами,
переданными из хоста.
3. Сделать некоторые пассы.
4. Вернуть хосту нужные простые типы из полей.
5. Разрушить объект.
Налицо некоторые overheads. Т.е., все это совершенно спокойно
можно свести к неким преобразованиям простых типов,
без мучительных раздумий, как уследить за распределенной
в длл памяти, что будет, если будет повторный вызов в промежутке
между 1 - 6 и т.д.
> Я думаю, что LVT весьма неосторожновысказал фразу о том,
> что ООП не предназначено для использования в DLL.
Конечно, не предназначены. Какая уж тут осторожность.
Максимум ООП, что можно выжать из dll есть COM (см. [5])
> и хотелось бы услышать в подтверждение своих слов от Леонида
> Трояновского.
Извольте-с.
Не используйте объекты в длл и будет вам счастье.
И, вообще, не используйте длл, если без оной можно обойтись.
--
Regards, LVT.
Игорь Шевченко (2006-06-28 16:58:00) [148]ЕГыук (28.06.06 16:44) [38]
[36]
ЕГыук (2006-06-28 16:44:00) [149]> DLL ведь нельзя запустить на выполнение.
rundll
Пусик (2006-06-28 11:35:00) [150]Удалено модератором
Игорь Шевченко (2006-06-28 11:30:00) [151]Пусик © (28.06.06 11:22) [34]
> для выполнения некоторой функциииз DLL
Ты сказал! (с) Евангелие
Именно функции, а не метода какого-либо объекта.
> Зачем? Для чего отказываться от ООП в DLL? Какие есть для
> этого причины?
Например, написав DLL на языке, не имеющем средств ООП. И тем не менее, такая DLL будет исправно выполнять свой контракт, описанный в ейном интерфейсе. Я к тому, что реализация DLL с использованием ООП или без использования его не влияет на внешние по отношению к DLL программы.
"Мало ли, что там у DLL внутри" (с)
Игорь Шевченко (2006-06-28 11:24:00) [152]Adder © (28.06.06 11:21) [33]
Так это и буквы писать не стоит - а то запомнят и будут повторять в разных сочетаниях :)
В Delphi ООП с использованием DLL не реализуемо в чистом виде, собственно, об этом и речь. А переводить дискуссию на то, что сама реализация интерфейса DLL может быть написана с использованием ООП есть отход от темы ветки, только и всего.
Пусик (2006-06-28 11:22:00) [153]
> Это как ? Объясни пожалуйста. DLL ведь нельзя запустить
> на выполнение.
Можно. Например, использовать RunDll32.exe для выполнения некоторой функции из DLL.
> DLL с классами внутре может быть смело заменена на DLL без
> классов внутре,
Зачем? Для чего отказываться от ООП в DLL? Какие есть для этого причины?
Adder (2006-06-28 11:21:00) [154]
> Игорь Шевченко © (28.06.06 11:14) [32]
А причем тут тема ветки... Тему ветки забудут, а фразу запомнят..
И еще и повторять будут с умным видом в самых не подходящих для этого случаях.
Игорь Шевченко (2006-06-28 11:14:00) [155]Adder © (28.06.06 11:04) [30]
А тему ветки поглядеть не судьба ?
Игорь Шевченко (2006-06-28 11:11:00) [156]Пусик © (28.06.06 10:56) [29]
> Но DLL, однако, является самодостаточной.
> И имеет ценность сама по себе, а не только в составе какой-
> либо отдельной программы.
Это как ? Объясни пожалуйста. DLL ведь нельзя запустить на выполнение.
> Методы ООП прекрасно помогают писать код как в обычной программе,
> так и в DLL.
Я могу еще раз сказать, что программе безразлично, каким образом написан код в DLL, лишь бы процедурный интерфейс DLL выполнял свои функции. DLL с классами внутре может быть смело заменена на DLL без классов внутре, с точки зрения контракта между основной программой и DLL ничего не изменится. В языках, где классы можно экспортировать из DLL, такие действия не пройдут.
Adder (2006-06-28 11:04:00) [157]
> Игорь Шевченко © (28.06.06 10:31) [25]
Хм... однако
"ООП с использованием DLL" и "Использование вDLL"
абсолютно разные вещи (imho).
Пусик (2006-06-28 10:56:00) [158]
> Игорь Шевченко © (28.06.06 10:31) [25]
> Пусик © (28.06.06 10:22) [21] Дело в том, что DLL не является
> чем-то самостоятельным.
Но DLL, однако, является самодостаточной.
И имеет ценность сама по себе, а не только в составе какой-либо отдельной программы.
То, что внешней по отношению к DLL программе не интересно, что у нее внутри, еще не означает, что программирование кода в DLL должно быть без использования методов ООП.
Я думаю, что LVT весьма неосторожновысказал фразу о том, что ООП не предназначено для использования в DLL.
Методы ООП прекрасно помогают писать код как в обычной программе, так и в DLL.
И мне непонятно, к каким негативным последствиям может привести сложный код, реализованный с использование ООП в DLL.
Именно о отрицательных сторонах использования ООП в DLL и хотелось бы услышать в подтверждение своих слов от Леонида Трояновского.
Fay (2006-06-28 10:41:00) [159]2 Игорь Шевченко © (28.06.06 10:37) [27]
Ах в этом смысле... 8) Наверное так и нужно было сказать.
Я, конечно, не допускаю мысли, что Leonid Troyanovsky думал то же, что написал, но не уточнить не мог 8)
Игорь Шевченко (2006-06-28 10:37:00) [160]Fay © (28.06.06 10:35) [26]
> В смысле?
В смысле, что ниоткуда, кроме как из EXE той же версии Delphi, их использовать не получится.