当前位置:主页>仓库管理软件> 列表

动态运行自定义函数问题 找进销存表格

财务软件版1楼: 各位老大,我现在有个问题:我的函数名称是字符串,怎样才能通过这些字符串指行的我的函数呢?
例如:函数为
function TCYFCommand.RecordGet020(
info:THeaderInfo;LYDataSetArray:TLYDataSetArray): TLYDataSetArray;
var
sdsTest:TSQLDataSet;
dspTest:TDataSetProvider;
begin
sdsTest:=TSQLDataSet.Create(nil);
dspTest:=TDataSetProvider.Create(nil);
sdsTest.SQLConnection:=SQLConnection[dbtOracle];
SetLength(Result,1);
try
sdsTest.CommandText:=''select * from 日志锅炉运行报表 where 1=2'';
sdsTest.Open;
dspTest.DataSet:=sdsTest;
Result[0]:=TLYDataSet.Create(nil,CONST_CHENGYANFENG);
Result[0].SetProvider(dspTest);
Result[0].Active:=True;
finally
sdsTest.Free;
dspTest.Free;
end;
end;
我现在只知道:‘RecordGet020’这个字符串,怎么运行我这个函数中的程序呢?
在线等。

2楼: 好郁闷的问题...你是说要怎么运行这个函数是吧.
哪里要执行写下面代码就可以啦.
RecordGet020(info,LYDataSetArray); 如进销存表格

3楼: 没有宏替换


你写个case吧

4楼: 这样应该行
============
RecordGet020(yourTHeaderInfo,yourTLYDataSetArray);
============
就可以的~

5楼: 楼主,我是沙发,我的答案是最早也是最接近的,这分给我也是无可厚非的..执行吧..谢谢.

6楼: DELPHI有过程变量的
但,即使取得了函数的地址,并能调用,函数的参数怎么办?
这个问题以前讨论过,即使实现了也不能通用,因为参数是千变万化的

财务软件版7楼: 请收藏此贴:

http://www.delphibbs.com/delphibbs/dispq.asp?lid=1289838

8楼: 呵呵,还是不太明白,请问bjyplbx,case怎么写呀,可能其它老大不太理解这吧,我的意思是在Unit1中知道RecordGet020这个字符串,而RecordGet020是定义在Unit2中的,我怎么在Unit1中去指行Unit2里这个函数呢?

9楼: 我有类似用字符串,找到其代表的窗体的代码。
我想是不是有个什么注册之类的?我那个就是那样做的。我把代码贴出来,你看看,不能有没有用。实在不行,我给你找个JAVA里的代码,不知有没有什么启发。
procedure Tw_Main.FormCreate(Sender: TObject);
begin
RegisterClass(TUSER_INFO);//,TTMEDISC_INFO);//
RegisterClass(TTMEDISC_INFO);
RegisterClass(Tgangwei_F);


上面的是注册窗体类的
下面是用来根据字符串打开窗体的:
winName:=trim(SetItems(''POPEDOM_WINDNAME'',''select POPEDOM_WINDNAME from POPEDOM where POPEDOM_WINTITLE=''''''+ CurrentNode.Text+''''''''));//这是一个自定义函数,主要是得到窗体名
if winName<>'''' then
begin
MyClass:=TFormClass(GetClass(winName));//找到和字符串匹配的窗体类
begin
OpenWin(MyClass,MyObj,ClientPanel);//自定义过程,打开某个窗体。
end;
end;

10楼: type
TNumericChoiceFunc = (RecordGet020, RecordGet021, RecordGet022);

uses
unit2,
TypInfo;
...
..



procedure TForm1.Button4Click(Sender: TObject);
var
s : string;
begin
s := ''RecordGet022'';
case TNumericChoiceFunc(GetEnumValue(TypeInfo(TNumericChoiceFunc), s)) of
RecordGet020: showmessage(''RecordGet020'');//直接调用unit2中的函数
RecordGet021: showmessage(''RecordGet021'');
RecordGet022: showmessage(''RecordGet022'');
else
showmessage(''Who do you think that you are?'');
end;
end;

11楼: 获取函数指针自然可以.而参数想做到通用,也并不是不可能的.不过是需要自己做一个框架.类似于.NET的框架.也就是对于需要的函数/数据结构有一个自我描述的途径.而对于数据结构的描述,简单的数据结构(不涉及指针的结构)描述是比较简单的.用 一个指针 + 一个结构大小 就可以描述.