-
Удалено модератором
-
По-моему, автору вот это надо: http://ru.wikipedia.org/wiki/DLL program Example;
var result: Double;
LibHandle: Hmodule;
AddNumbers: function(a, b: Double): Double;
begin
LibHandle := LoadLibrary('Example.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); end;
end.
-
> Вот-вот. Как rundl работает?
push push ... push call ?
-
> По-моему, автору вот это надо:
Как раз таки нет. Я же писал, что без предопределения функции. Вызов динамический.
-
> Как раз таки нет. Я же писал, что без предопределения функции. > Вызов динамический.
Вот Незнайка (Не прими на свой счёт. Имеется в виду персонаж известного произведения Н. Носова :) тоже хотел иметь волшебную палочку. Он её и получил после совершения трех хороших поступков. Но что было далее? Прочитай. Полезно будет.
-
> Германн © (17.12.10 01:53) [44]
> Но что было далее?
Надругался над Дюймовочкой, ака Жаба? :)
-- Regards, LVT.
-
> Как раз таки нет. Я же писал, что без предопределения функции. > Вызов динамический.
Так ведь
Vidog © (30.11.10 20:34) [2] > А если я заведомо знаю ... кол-во параметров...
Что тогда подразумевается под "знанием", если не предопределение типа функции?
-
> Leonid Troyanovsky © (17.12.10 19:25) [45] > > > > Германн © (17.12.10 01:53) [44] > > > Но что было далее? > >
Тебе тоже стоит прочитать. :) Ибо наломал Незнайка, а исправлять-то придётся волшебнику! :)
-
> Что тогда подразумевается под "знанием", если не предопределение > типа функции?
Просто физически известно, что функция называется Sum и у нее 2 параметра: A и B
без определения функции Sum, нужно подключиться к библиотеке, найти адрес функции, послать ей массив из 2х элементов и получить результат.
-
> послать ей массив
Обязательно массив? Если нет, то не очень понятно, чем приведённый пример не устраивает. var AddNumbers: function(a, b: Double): Double; - это не определение функции, это определение переменной, имеющий тип функции с двумя параметрами типа Double. А далее, собственно, всё, как Вы и говорите - загружаем библиотеку, находим в ней адрес функции и вызываем. А как иначе вы расскажете компилятору, то, что Вам > физически известно? Если не нравится - пишите на ассемблере, но исполнимый код-то в результате всё равно получится такой же.
-
> известно, что функция называется Sum и у нее 2 параметра: > A и B > > без определения функции Sum, нужно подключиться к библиотеке, > найти адрес функции, послать ей массив из 2х элементов > и получить результат
Ожидаемый результат ты не получишь, с вероятностью ориентировочно фифти-фифти) Потому что знания имени точки входа, кол-ва параметров и даже их типов НЕдостаточно для успешной эксплуатации функции. Как минимум нужно достоверно знать еще и соглашение о вызове.
-
> clickmaker © (13.12.10 19:14) [42] > > Вот-вот. Как rundl работает?pushpush...pushcall ?
Господин, Вы, кажется, забыли про стандарты вызова.. Даже это будет не так-то и просто..
|