Конференция "WinAPI" » Динамическая загрузка DLL
 
  • Vidog © (06.12.10 00:12) [20]

    > function test(a, b, c: String): String;
    > begin
    >   Result :=  '[' + a + ']' + '[' + b + ']' + '[' + c + ']';
    > end;
    > exports test;


    а конкретно в таком случае? без определения этой функции и получения ее адреса с последующим вызовом, можно передать ей параметры "на лету" и забрать результат?
  • Германн © (06.12.10 00:26) [21]

    > а конкретно в таком случае?

    <offtop>
     Твой вопрос сильно смахивает на задачу/вопрос XYZ http://www.gunsmoker.ru/2008/10/x-y-z.html
    </offtop>
    Сам подумай кому нужно ломать голову над некой тестовой функцией, которая не имеет никакого смысла для отвечающих?


    > Мужики, ну спасайте

    Пока не озвучишь свою реальную задачу, на реальную помощь не надейся.
  • Anatoly Podgoretsky © (06.12.10 09:05) [22]
    лучше отрубить голову.
  • Сергей М. © (06.12.10 20:43) [23]

    > а конкретно в таком случае?


    А чем этот "конкретно такой случай" отличается от "неконкретно хз какого случая" ?
  • Игорь Шевченко © (06.12.10 23:14) [24]
    rundll как-то работает. Загружает DLL, ищет в ней функцию с указанным именем, преобразует параметры из строк в числа или в строки, передает эти параметры и вызывает нужную функцию.

    Автору наверное надо что-то похожее.
  • Германн © (07.12.10 04:08) [25]

    > Игорь Шевченко ©   (06.12.10 23:14) [24]
    >
    > rundll как-то работает

    Вот-вот. Как rundl работает?
    "Загружает DLL, ищет в ней функцию с указанным именем, преобразует параметры из строк в числа или в строки, передает эти параметры и вызывает нужную функцию". Не верю.
  • Ой (07.12.10 10:29) [26]
    +1
    А если Dll C'ишная...? Это бред. ))
  • Leonid Troyanovsky © (07.12.10 16:08) [27]

    > Германн ©   (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]

    > Автору наверное надо что-то похожее


    Было бы "надо" - он бы сказал.
    А он, похоже, даже своё "надо" в лицо не знает. Но при этом ему "хочется". А что ему "хочется" - это он уточнять не намерен)
  • Leonid Troyanovsky © (07.12.10 22:56) [29]

    > Сергей М. ©   (07.12.10 19:33) [28]

    > ему "хочется". А что ему "хочется" - это он уточнять не
    > намерен)

    Ему хочется странного, потому древние китайцы
    ему голову и постановили элиминировать.

    --
    Regards, LVT.
  • Сергей М. © (07.12.10 23:29) [30]

    > Leonid Troyanovsky ©   (07.12.10 22:56) [29]


    Кошмар, конечно, но.. с древнекитайскими традициями вряд ли поспоришь) .. особливо здесь, в Мастерской)
  • Leonid Troyanovsky © (07.12.10 23:40) [31]

    > Сергей М. ©   (07.12.10 23:29) [30]

    > Кошмар, конечно, но.. с древнекитайскими традициями вряд
    > ли поспоришь) .. особливо здесь, в Мастерской)

    А в Детской рискнешь? :)

    --
    Regards, LVT.
  • Сергей М. © (08.12.10 00:18) [32]

    > Leonid Troyanovsky ©   (07.12.10 23:40) [31]


    > в Детской рискнешь? :)


    В детской тем паче не рискну)
  • Германн © (08.12.10 02:01) [33]

    > Leonid Troyanovsky ©   (07.12.10 16:08) [27]
    >
    >
    > > Германн ©   (07.12.10 04:08) [25]
    >
    > > Вот-вот. Как rundl работает?
    >
    > Чему ты не веришь?
    > Функции, которые она вызывает имеют прототип:
    >

    Не верю в реальность вызова произвольной функции из произвольной библиотеки а-ля rundll.
    А все остальное - к автору вопроса.
    С учётом Германн ©   (06.12.10 00:26) [21]
  • Leonid Troyanovsky © (08.12.10 08:20) [34]

    > Германн ©   (08.12.10 02:01) [33]

    > Не верю в реальность вызова произвольной функции из произвольной
    > библиотеки а-ля rundll.

    Произвольной - я тоже не верю.

    http://support.microsoft.com/kb/164787

    Про 3 числа я не совсем верно сказал,
    только параметры, sorry.

    --
    Regards, LVT.
  • Vidog © (09.12.10 17:29) [35]

    >  [24]
    > rundll как-то работает. Загружает DLL, ищет в ней функцию
    > с указанным именем, преобразует параметры из строк в числа
    > или в строки, передает эти параметры и вызывает нужную функцию.
    > Автору наверное надо что-то похожее.


    Да. именно это и нужно.

    Я пытаюсь создать так называемую систему "плагинов" к приложению. Как например модули DLL для php. Все функции экспортнуты внутри DLL, число параметров, допустим, будет известно, имена функций тоже.

    плагин к lister'у тотал-коммандера умеет находить в любой библиотеке функции, которые были объявлены на export. И даже запускать процедуры (без параметров).

    Поэтому заранее предопределить вызовы внутри приложения не получится. Они переменны и в каждой DLL будут уникальны.
  • Сергей М. © (09.12.10 21:33) [36]

    > Как например модули DLL для php


    Те же самые "модули DLL для php" - вполне документированная спецификация и технология, безо всякого бардака типа "на вот тебе модуль, в нем заранее неопределенная хуча экспортнутых точек входа, а их параметры выковыривай сам если тебе приспичило ".

    Так что это сравнение - в топку.
  • Германн © (10.12.10 01:40) [37]

    > Все функции экспортнуты внутри DLL, число параметров, допустим,
    >  будет известно, имена функций тоже.


    > Поэтому заранее предопределить вызовы внутри приложения
    > не получится. Они переменны и в каждой DLL будут уникальны.

    Если разработчику приложения заранее известны имена функций в dll и их параметры, то ничто не мешает стандартному вызову этих функций в приложении. Если нет, то как их вообще можно разумно вызвать? Даже если приложению сказать что есть dll-имярек, в которой есть функция-имярек, у которой N параметров такого-то типа. Вызвать-то её теоретически можно, но вот какие значения параметров при этом передавать, если про смысл этих параметров приложение заранее не знает!
  • Германн © (10.12.10 02:15) [38]
    Забыл упомянуть что такая же неопределенность существует и для результата функции вызванной из библиотеки. С той лишь разницей, что "обычные" плагины основной результат, как правило, "обрабатывают сами". А во внешнее приложение только сообщают об ошибке, если таковая случится.

    P.S. Эта мода на плагины уже достала.
    Не на форуме, а от заказчиков.
  • Сергей М. © (10.12.10 16:19) [39]
    Удалено модератором
 
Конференция "WinAPI" » Динамическая загрузка DLL
Есть новые Нет новых   [134431   +10][b:0][p:0.001]