![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Господа, помогите сделать.
есть несколько модулей (init1,init2) с полностью идентичными процедурами (имя процедуры, переменные) нужно сделать так чтоб можно было выбрать из списка алгоритм расчета (совпадает с именем модуля) и программа выполнялась только по тем процедурам что в выбранном модулe. ниже привел схему, которая работает с DLL но не с модулями Код:
unit algoritm1; procedure Input(A,B,C:integer; Rez1:integer); procedure OutPut(G:integer; Rez2:integer); procedure Run(F:integer; Rez3:integer); exports Input name 'Input', OutPut name 'OutPut', Run name 'Run'; begin end. unit algoritm2; procedure Input(A,B,C:integer; Rez1:integer); procedure OutPut(G:integer; Rez2:integer); procedure Run(F:integer; Rez3:integer); exports Input name 'Input', OutPut name 'OutPut', Run name 'Run'; begin end. unit General; type TG_input = procedure (A,B,C:integer; Rez1:integer); TG_Output = procedure (G:integer; Rez2:integer); TG_Run = procedure (F:integer; Rez3:integer); var input :TG_input; Output :TG_Output; Run :TG_Run; implementation procedure TForm1.ListBox1MouseDown(); var lbox :string; begin lbox:=ListBox1.Items.Strings[ListBox1.ItemIndex]; @input:=getProcAddress( lbox ,'Input'); @Output:=getProcAddress( lbox ,'Output'); @Run:=getProcAddress( lbox ,'Run'); end; end. |
#2
|
||||
|
||||
![]() Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TMyBeep = procedure(dwFreq, dwDuration: DWORD); TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure MyBeep(dwFreq, dwDuration: DWORD); begin Windows.Beep(dwFreq, dwDuration); end; procedure TForm1.FormCreate(Sender: TObject); var p: TMyBeep; begin @p:=@Unit1.MyBeep; p(1000, 100); end; end. Пишу программы за еду. __________________ |
#3
|
|||
|
|||
![]() не совсем так. в данном случае Unit1- должно быть string
|
#4
|
||||
|
||||
![]() в данном случае Unit1 вообще не нужно и написано для примера:
Код:
@p:=@MyBeep; Пишу программы за еду. __________________ |
#5
|
|||
|
|||
![]() тогда это не то что нужно. смысл в том чтоб по имени модуля запускать процедуры. причем имя модуля задается символьно. количество модулей бесконечно и поэтому нельзя "привязаться" к ним жестко (Unit1.MyBeep)
|
#6
|
||||
|
||||
![]() тогда не понятно зачем это нужно? почему конечному пользователю нужно знать имена всех модулей, тем более что их бесконечное число)))
Пишу программы за еду. __________________ |