unit a ;uses b ; var x : Td ; begin try x:=Td.Create(); x.e; finally x.free ; end; end;
数据库中能够得到单元b的名称和函数的名称? 不写在UNIT中而在数据库中可以调用吗? 顶一下了
====================================== a单元unit a ;uses b ;var x : Td ; begin try x:=Td.Create(); x.e; finally x.free ; end; end; =========================== b单元 unit binterface type Tb=Class(...) private //注意:不能申明在这里 public function e:返回类型; end; implementation function Td.e:返回类型; begin ........... end; end.
call a routine by its name? type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); // Your routines (that you'll run by name) must be here procedure Hello_World(Sender: TObject); private procedure ExecuteRoutine(Instance: TObject; Name: string); end; var Form1: TForm1; type TExecute = procedure of object; procedure TForm1.ExecuteRoutine(Instance: TObject; Name: string); var Routine: TMethod; Execute: TExecute; begin Routine.Data := Pointer(Instance); // Returns the address of a published method. Routine.Code := Instance.MethodAddress(Name); if Routine.Code = nil then Exit; Execute := TExecute(Routine); Execute; end; procedure TForm1.Button1Click(Sender: TObject); begin ExecuteRoutine(Form1, 'Hello_World'); end; procedure TForm1.Hello_World(Sender: TObject); begin ShowMessage('This is a test'); end;
var x : Td ;
begin
try
x:=Td.Create();
x.e;
finally
x.free ;
end;
end;
不写在UNIT中而在数据库中可以调用吗?
顶一下了
a单元unit a ;uses b ;var x : Td ;
begin
try
x:=Td.Create();
x.e;
finally
x.free ;
end;
end;
===========================
b单元
unit binterface
type
Tb=Class(...)
private
//注意:不能申明在这里
public
function e:返回类型;
end;
implementation function Td.e:返回类型;
begin
...........
end;
end.
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
// Your routines (that you'll run by name) must be here
procedure Hello_World(Sender: TObject);
private
procedure ExecuteRoutine(Instance: TObject; Name: string);
end; var
Form1: TForm1; type
TExecute = procedure of object; procedure TForm1.ExecuteRoutine(Instance: TObject; Name: string);
var
Routine: TMethod;
Execute: TExecute;
begin
Routine.Data := Pointer(Instance);
// Returns the address of a published method.
Routine.Code := Instance.MethodAddress(Name);
if Routine.Code = nil then Exit;
Execute := TExecute(Routine);
Execute;
end; procedure TForm1.Button1Click(Sender: TObject);
begin
ExecuteRoutine(Form1, 'Hello_World');
end; procedure TForm1.Hello_World(Sender: TObject);
begin
ShowMessage('This is a test');
end;
所以你的函数一定要声明在Published中才行的。
直接Execute(参数)就可以了