-
> function test(a, b, c: String): String; > begin > Result := '[' + a + ']' + '[' + b + ']' + '[' + c + ']'; > end; > exports test;
а конкретно в таком случае? без определения этой функции и получения ее адреса с последующим вызовом, можно передать ей параметры "на лету" и забрать результат?
-
> а конкретно в таком случае?
<offtop> Твой вопрос сильно смахивает на задачу/вопрос XYZ http://www.gunsmoker.ru/2008/10/x-y-z.html</offtop> Сам подумай кому нужно ломать голову над некой тестовой функцией, которая не имеет никакого смысла для отвечающих? > Мужики, ну спасайте
Пока не озвучишь свою реальную задачу, на реальную помощь не надейся.
-
лучше отрубить голову.
-
> а конкретно в таком случае?
А чем этот "конкретно такой случай" отличается от "неконкретно хз какого случая" ?
-
rundll как-то работает. Загружает DLL, ищет в ней функцию с указанным именем, преобразует параметры из строк в числа или в строки, передает эти параметры и вызывает нужную функцию.
Автору наверное надо что-то похожее.
-
> Игорь Шевченко © (06.12.10 23:14) [24] > > rundll как-то работает
Вот-вот. Как rundl работает? "Загружает DLL, ищет в ней функцию с указанным именем, преобразует параметры из строк в числа или в строки, передает эти параметры и вызывает нужную функцию". Не верю.
-
+1 А если Dll C'ишная...? Это бред. ))
-
> Германн © (07.12.10 04:08) [25]
> Вот-вот. Как rundl работает?
Чему ты не веришь? Функции, которые она вызывает имеют прототип:
procedure X( wnd: HWND; hinst: THandle; CmdLine: PChar; nCmdShow: Longint); stdcall; Х должна быть в экспортах.
А rundll, получив строку, должна выделить (и преобразовать) 3 числа и строку параметров.
-- Regards, LVT.
-
> Автору наверное надо что-то похожее
Было бы "надо" - он бы сказал. А он, похоже, даже своё "надо" в лицо не знает. Но при этом ему "хочется". А что ему "хочется" - это он уточнять не намерен)
-
> Сергей М. © (07.12.10 19:33) [28]
> ему "хочется". А что ему "хочется" - это он уточнять не > намерен)
Ему хочется странного, потому древние китайцы ему голову и постановили элиминировать.
-- Regards, LVT.
-
> Leonid Troyanovsky © (07.12.10 22:56) [29]
Кошмар, конечно, но.. с древнекитайскими традициями вряд ли поспоришь) .. особливо здесь, в Мастерской)
-
> Сергей М. © (07.12.10 23:29) [30]
> Кошмар, конечно, но.. с древнекитайскими традициями вряд > ли поспоришь) .. особливо здесь, в Мастерской)
А в Детской рискнешь? :)
-- Regards, LVT.
-
> Leonid Troyanovsky © (07.12.10 23:40) [31]
> в Детской рискнешь? :)
В детской тем паче не рискну)
-
> Leonid Troyanovsky © (07.12.10 16:08) [27] > > > > Германн © (07.12.10 04:08) [25] > > > Вот-вот. Как rundl работает? > > Чему ты не веришь? > Функции, которые она вызывает имеют прототип: >
Не верю в реальность вызова произвольной функции из произвольной библиотеки а-ля rundll. А все остальное - к автору вопроса. С учётом Германн © (06.12.10 00:26) [21]
-
> Германн © (08.12.10 02:01) [33]
> Не верю в реальность вызова произвольной функции из произвольной > библиотеки а-ля rundll.
Произвольной - я тоже не верю. http://support.microsoft.com/kb/164787Про 3 числа я не совсем верно сказал, только параметры, sorry. -- Regards, LVT.
-
> [24] > rundll как-то работает. Загружает DLL, ищет в ней функцию > с указанным именем, преобразует параметры из строк в числа > или в строки, передает эти параметры и вызывает нужную функцию. > Автору наверное надо что-то похожее.
Да. именно это и нужно.
Я пытаюсь создать так называемую систему "плагинов" к приложению. Как например модули DLL для php. Все функции экспортнуты внутри DLL, число параметров, допустим, будет известно, имена функций тоже.
плагин к lister'у тотал-коммандера умеет находить в любой библиотеке функции, которые были объявлены на export. И даже запускать процедуры (без параметров).
Поэтому заранее предопределить вызовы внутри приложения не получится. Они переменны и в каждой DLL будут уникальны.
-
> Как например модули DLL для php
Те же самые "модули DLL для php" - вполне документированная спецификация и технология, безо всякого бардака типа "на вот тебе модуль, в нем заранее неопределенная хуча экспортнутых точек входа, а их параметры выковыривай сам если тебе приспичило ".
Так что это сравнение - в топку.
-
> Все функции экспортнуты внутри DLL, число параметров, допустим, > будет известно, имена функций тоже.
> Поэтому заранее предопределить вызовы внутри приложения > не получится. Они переменны и в каждой DLL будут уникальны.
Если разработчику приложения заранее известны имена функций в dll и их параметры, то ничто не мешает стандартному вызову этих функций в приложении. Если нет, то как их вообще можно разумно вызвать? Даже если приложению сказать что есть dll-имярек, в которой есть функция-имярек, у которой N параметров такого-то типа. Вызвать-то её теоретически можно, но вот какие значения параметров при этом передавать, если про смысл этих параметров приложение заранее не знает!
-
Забыл упомянуть что такая же неопределенность существует и для результата функции вызванной из библиотеки. С той лишь разницей, что "обычные" плагины основной результат, как правило, "обрабатывают сами". А во внешнее приложение только сообщают об ошибке, если таковая случится.
P.S. Эта мода на плагины уже достала. Не на форуме, а от заказчиков.
-
Удалено модератором
|