Конференция "WinAPI" » Динамическая загрузка DLL
 
  • Сергей М. © (10.12.10 16:27) [40]
    Удалено модератором
  • Styx (13.12.10 19:00) [41]
    По-моему, автору вот это надо:
    http://ru.wikipedia.org/wiki/DLL
    program Example;
    {$APPTYPE CONSOLE}

    var result: Double;
        LibHandle: Hmodule;
        AddNumbers: function(a, b: Double): Double;
    begin
      LibHandle := LoadLibrary('Example.dll'); // загружаем DLL
      if LibHandle <> 0 then
        begin
          @AddNumbers := GetProcAddress(LibHandle, 'AddNumbers'); // запоминаем адрес
                                                                  // необходимой функции
          if @AddNumbers <> nil then
            begin
              result := AddNumbers(1, 2);       // используем функцию
              Writeln('The result was: ', result);
            end;
          FreeLibrary(LibHandle);               // выгружаем DLL
        end;
    end.

  • clickmaker © (13.12.10 19:14) [42]
    > Вот-вот. Как rundl работает?

    push
    push
    ...
    push
    call ?
  • Vidog © (17.12.10 01:19) [43]

    > По-моему, автору вот это надо:

    Как раз таки нет. Я же писал, что без предопределения функции. Вызов динамический.
  • Германн © (17.12.10 01:53) [44]

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

    Вот Незнайка (Не прими на свой счёт. Имеется в виду персонаж известного произведения Н. Носова :) тоже хотел иметь волшебную палочку. Он её и получил после совершения трех хороших поступков. Но что было далее? Прочитай. Полезно будет.
  • Leonid Troyanovsky © (17.12.10 19:25) [45]

    > Германн ©   (17.12.10 01:53) [44]

    >  Но что было далее?

    Надругался над Дюймовочкой, ака Жаба? :)

    --
    Regards, LVT.
  • Styx (18.12.10 01:09) [46]

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

    Так ведь

    Vidog ©   (30.11.10 20:34) [2]
    > А если я заведомо знаю ... кол-во параметров...

    Что тогда подразумевается под "знанием", если не предопределение типа функции?
  • Германн © (18.12.10 02:15) [47]

    > Leonid Troyanovsky ©   (17.12.10 19:25) [45]
    >
    >
    > > Германн ©   (17.12.10 01:53) [44]
    >
    > >  Но что было далее?
    >
    >

    Тебе тоже стоит прочитать. :)
    Ибо наломал Незнайка, а исправлять-то придётся волшебнику! :)
  • Vidog © (18.12.10 19:09) [48]

    > Что тогда подразумевается под "знанием", если не предопределение
    > типа функции?


    Просто физически известно, что функция называется Sum и у нее 2 параметра: A и B

    без определения функции Sum, нужно подключиться к библиотеке, найти адрес функции, послать ей массив из 2х элементов и получить результат.
  • Styx (18.12.10 19:37) [49]

    > послать ей массив

    Обязательно массив? Если нет, то не очень понятно, чем приведённый пример не устраивает.
    var AddNumbers: function(a, b: Double): Double; - это не определение функции, это определение переменной, имеющий тип функции с двумя параметрами типа Double. А далее, собственно, всё, как Вы и говорите - загружаем библиотеку, находим в ней адрес функции и вызываем. А как иначе вы расскажете компилятору, то, что Вам > физически известно? Если не нравится - пишите на ассемблере, но исполнимый код-то в результате всё равно получится такой же.
  • Сергей М. © (19.12.10 16:35) [50]

    > известно, что функция называется Sum и у нее 2 параметра:
    >  A и B
    >
    > без определения функции Sum, нужно подключиться к библиотеке,
    >  найти адрес функции, послать ей массив из 2х элементов
    > и получить результат


    Ожидаемый результат ты не получишь, с вероятностью ориентировочно фифти-фифти)
    Потому что знания имени точки входа, кол-ва параметров и даже их типов НЕдостаточно для успешной эксплуатации функции.
    Как минимум нужно достоверно знать еще и соглашение о вызове.
  • Petuh (01.09.11 23:10) [51]

    > clickmaker ©   (13.12.10 19:14) [42]
    > > Вот-вот. Как rundl работает?pushpush...pushcall ?

    Господин, Вы, кажется, забыли про стандарты вызова.. Даже это будет не так-то и просто..
 
Конференция "WinAPI" » Динамическая загрузка DLL
Есть новые Нет новых   [134431   +10][b:0.001][p:0.002]