S
shaver
Unregistered / Unconfirmed
GUEST, unregistred user!
我的一个三层结构应用程序中需要用到回叫机制。
我采取的办法是在接口文件(相关的XXX_TLB文件)中定义了一个回叫的接口。
IServerCallback = IntegerFace
[...]
procedure OnQueryed(ChackResult : TCheckResult);safecall;
end;
在客户端实现此接口,并且在客户端主程序的CREATE事件中CREATE此接口的实现类。
TServerCallback = class(TAutoIntfobject,IServerCallback)
procedure OnQueryed(CheckResult : TCheckresult);safecall;
end;
...
Constructor TmainFormCreate(Sender : TComponent);
var
callback : IServerCallback;
Typelib : tTypelib;
begin
Olecheck(loadRegTypelib(XX,XX,XX,Typelib));
callback := TServerCallback.create(Typelib,XX);
end;
...
在调用服务器方法时将Callback传过去
Query(callback);...
服务器在Query方法的实现中接受此Callback,并且在需要时回叫。
var
Fcallback : IServerCallback;
...
Fcallback := nil;
...
procedure TServerQuery(callback : IServerCallback);
begin
FCallback := Callback;
//if FCallback <> nil then
!!!此处调用一点问题都没有
// callback.Onqueryed(CR_OK);
end;
.....
其它方法中则问题出来了
....
if FCallback <> nil then
!!!此处调用出错
callback.Onqueryed(CR_OK);
....
服务器端出现错误提示:消息过滤器拒绝调用
请"有识之士"帮忙找一下问题所在,先致谢意!!!
shaver
我采取的办法是在接口文件(相关的XXX_TLB文件)中定义了一个回叫的接口。
IServerCallback = IntegerFace
[...]
procedure OnQueryed(ChackResult : TCheckResult);safecall;
end;
在客户端实现此接口,并且在客户端主程序的CREATE事件中CREATE此接口的实现类。
TServerCallback = class(TAutoIntfobject,IServerCallback)
procedure OnQueryed(CheckResult : TCheckresult);safecall;
end;
...
Constructor TmainFormCreate(Sender : TComponent);
var
callback : IServerCallback;
Typelib : tTypelib;
begin
Olecheck(loadRegTypelib(XX,XX,XX,Typelib));
callback := TServerCallback.create(Typelib,XX);
end;
...
在调用服务器方法时将Callback传过去
Query(callback);...
服务器在Query方法的实现中接受此Callback,并且在需要时回叫。
var
Fcallback : IServerCallback;
...
Fcallback := nil;
...
procedure TServerQuery(callback : IServerCallback);
begin
FCallback := Callback;
//if FCallback <> nil then
!!!此处调用一点问题都没有
// callback.Onqueryed(CR_OK);
end;
.....
其它方法中则问题出来了
....
if FCallback <> nil then
!!!此处调用出错
callback.Onqueryed(CR_OK);
....
服务器端出现错误提示:消息过滤器拒绝调用
请"有识之士"帮忙找一下问题所在,先致谢意!!!
shaver