Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Вызов функции по имени


Автор: Budy 29.1.2006, 14:17
:Приветствую
Подскажите, как мона вызвать функцию, зная лишь ее имя (например cos или trunc), и при том нужно получить возвращаемый ею результат

Автор: ivan219 29.1.2006, 14:26
Имя функции это переменная и она несёт результат. Cos(X)

Автор: Guedda 29.1.2006, 14:59
Ты в другом форуме постил, и там пример был про два эдита... Так вот ответ, в принципе:
Код

type
  TMyFunc = function(x : Real) : Real;

var
  Dll_Hnd : THandle;
  MyFunc : TMyFunc;
procedure TForm1.Button1Click(Sender: TObject);
var
  b : Real;
begin
  Dll_Hnd := LoadLibrary('MyLib.dll');
  if DLL_Hnd = 0 then raise Exception.Create('Библиотека MyLib.dll не найдена!')
  else
  begin
    try @MyFunc := GetProcAddress(DLL_Hnd, Edit1.Text); // собственно, имя функции
        if @MyFunc <> nil then 
          b := MyFunc(StrToFloat(Edit2.Text)); //Собственно, юзаем функцию из дллки
    except 
        on E: Exception do 
          ShowMessage('Ашыпка: ' + E.Message); 
      end; 
    end; 
    FreeLibrary(DLL_Hnd);
  end;
end;

Автор: Budy 31.1.2006, 06:51
Ну емое, мне не надо через DLL.....

Автор: _hunter 31.1.2006, 12:03
а через что тебе нужно?

Автор: Guedda 31.1.2006, 14:58
Если через приложение, тогда так:
Код

procedure TForm1.Button1Click(Sender : Tobject);
begin
  Str := Edit1.Text; //Твоя функция
  if Str = 'sin' then y := sin(x)
  else if Str = 'cos' then y := cos(x);
end;


Легче делать через длл.

Автор: _hunter 31.1.2006, 16:07
Guedda, тебя не смущает что одних API-шных функций за несколько десятков тысяч?
ты только их имена несколько месяцев писать будеш...

Автор: Budy 2.2.2006, 19:14
_hunter, мне не нуна чтоб всякие лишние файлы были, чисто один exe без всяких DLLок

Автор: _hunter 2.2.2006, 19:43
а не спрашивал что тебе ненуна. я спрашивал через что тебе нужно.
точнее что, вообще, должно получится ( какие функции нужно вызывать ( где они расположены ) )

Автор: Budy 3.2.2006, 16:05
Меня вообще интерисует возможность такого.
Для начала было бы неплохо получать таким путем отя бы тригонометрические функции из math (например). Через что без разницы, главное чтоб исполняемый файл был один без всяких DAT, DLL и тп

Автор: Guedda 3.2.2006, 16:08
тебе просто-напросто необходимо написать мини-интерпретатор. Я думаю, что лучше его делать на С либо на Asm

Автор: _hunter 3.2.2006, 16:18
Guedda, пример в студию!

Budy, с функциями из модуля math может и не получится -- неизвестно где они расположены ( math.bpl? -- нужно проверить... )
но даже если получится -- придется тянуть за собой этот модуль.
+ ты так и не сказал -- тебе нужна возможность вызова функций вообще или вызова какого-то ограниченного ( и заранее известного ) набора функций...

Автор: Budy 4.2.2006, 00:57
_hunter, блин, вы говорите загадками, я уже сам не знаю чего мне надо smile
может какойнить пример уже напишешь?

Guedda, потому и пишу, что увидел как знакомый делает на C, и захотел на Delphi

Автор: RA 4.2.2006, 01:06
Пример для вызова апишных функций.

Автор: Budy 5.2.2006, 20:50
Ладно, всем сенк, возьму что есть

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)