Delphi6下面的DCOM问题

Oicq99039 2002-04-12 11:35:10
procedure TVT.InvokeEvent(DispID: TDispID; var Params: TVariantArray);
begin
case DispID of
-1: Exit; // DISPID_UNKNOWN
1: if Assigned(FOnData) then
FOnData(Self, Params[3] {const WideString}, Params[2] {WordBool}, Params[1] {WordBool}, Params[0] {Integer});
2: if Assigned(FOnError) then
FOnError(Self, Params[0] {const WideString});
end; {case DispID}
end;
这是Delphi6中注册了一个我的AutoObject后自动生成的。
FOnData(Self, Params[3] {const WideString}, Params[2] {WordBool}, Params[1] {WordBool}, Params[0] {Integer});
这一句的参数是Self,Param[3],2,1,0
我客户端使用了我生成的控件的事件实际得到的参数却应当是Param[0],1,2,3
procedure TFrmMain.VT1Data(Sender: TObject; MissionID: Integer;
ProcSuccess, IsMyRequest: WordBool; var DevID: OleVariant);
这样事件procedure TFrmMain.VT1Data一触发就报错。因为MissionID被系统赋值为
DevID的值了。只有手动把它改成
FOnData(Self, Params[0] {const WideString}, Params[1] {WordBool}, Params[2] {WordBool}, Params[3] {Integer});
才能正常使用。



下面是我的DCOM的服务器端的程序自动生成的代码:
IVTEvents = dispinterface
['{DF2F1A58-B427-430B-BE42-A28B95F5D9B5}']
procedure OnData(MissionID: Integer; ProcSuccess: WordBool; IsMyRequest: WordBool;
const DevID: WideString); dispid 1;
procedure OnError(const AError: WideString); dispid 2;
end;

服务器端对事件的调用:
procedure TVT.ReturnBack(DevID: String; MissionID: Integer; ProcSuccess: Boolean; IsMyMission: Boolean);
begin
FEvents.OnData(MissionID, ProcSuccess, IsMyMission, DevID);
end;

...全文
32 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Oicq99039 2002-04-24
  • 打赏
  • 举报
回复
这个问题很糊涂
Oicq99039 2002-04-15
  • 打赏
  • 举报
回复
hehe,
I See

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧