Program Client;
uses unit1;procedure MyDo();
begin
writeln('dd');
readln();
end;
begin
ff:=@MyDo;
unitDo();end.
unit unit1;
interfacetype
Mydo=procedure;
var
ff:Mydo;
procedure unitDo();implementationprocedure unitDo();
begin
ff();
end;
beginend. 如果在unit1里将MyDo声明为函数指针,需要在Client里显式将MyDo赋值(有个弊端,客户端Client每次都需要将MyDo赋值)
unit1才可以调用客户端实现的函数。现在问题是,能否有什么方法,不需要客户端显式赋值,就
能够另unit1调用客户端实现的函数。?通过其他途径能够实现最好。
例如
类似下面例子的方式比较理想,但定义一个类然后继承虚函数。能否客户端不用继承这样的一个类呢?
Program Client;
uses unit1;procedure unit1.MyDo();
begin
writeln('dd');
readln();
end;
begin
unitDo();
end.
解决方案 »
- 谁有没IdHTTP淘宝登录的资料,借用Webbrowser的cookie一直抓取不来...
- 搞MRP系统的兄弟来看看,请描述一下MRP的运算边辑?
- 给个update..set...where..的例子,谢谢
- 将要到江西工作,希望在江西工作的朋友都可以进来价绍一下
- 关于TClientDataSet对中文的支持问题?在线等待!
- 我想写一个随机改变系统背景的程序,请问在98,2000和XP下分别该怎么做?
- Microsoft Agent整样用?
- 我想做一个主页, 用到sql server数据库。 需要哪些软件及开发工具去实现。谢谢各位,参与有分
- Delphi 6 里哪里找proxys.pas文件?
- where can i find DBTreeView?
- 实现B/S架构的小型企业管理系统
- cxgrid中赋值问题
要么作为参数:unitDo(MyDo);
要么直接调用:MyDo;
明白吗?
published
procedure A;
procedure B;
end;procedure TMyFunction.A;
begin
ShowMessage('a');
end;procedure TMyFunction.B;
begin
ShowMessage('b');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
P :Procedure;
begin
P := TMyFunction.MethodAddress('a'); //调用函数a
if Assigned(P) then
P;
P := TMyFunction.MethodAddress('b'); //调用函数b
if Assigned(P) then
P;
end;这样能达到你的要求吗?
消息怎么做?我的目的类似于,我封装好一个unit,当别人引用了我的unit之后就
会进入我的消息机制,每到适当时候我会回调用户的函数,这些函数都是确定的
但不知道用户是否实现,如果用户实现了,就调用用户自定义的,否则调用默认,或者什么都不作。基本的我都已经实现了,只是object pascal的类不好用(或者是我不会用),入口函数不能随意定义,
只能Program Client 里定义,所以我就不能隐藏入口。能否像钩子一样让用户代码勾住unit单元的方法?定义方式不重要不知道我说明白没有
VCL控件那些事件就是这样的嘛