???COM内部RAISE的错误,能传递出去给客户端吗???(100分)

  • 主题发起人 powersite
  • 开始时间
P

powersite

Unregistered / Unconfirmed
GUEST, unregistred user!
设计一个COM,
在COM内定义的方法Method1内操作时,如果内部执行有错误,想直接raise出错误信息,
客户端如果对于该调用的返回值用OLECHECK检查,将只有“远程调用出错”,而反馈不了COM内部的错误信息,
如果客户端用try...except...end,根本就没有捕获到COM调用是否出错,
请问,COM内部RAISE的错误信息如何传递到外部?
 
难道只能够将该COM内的方法多定义成一个VAR类型的STRING参数出去,同时定义一个FUNCTION的返回值吗?然后,客户端执行完毕之后,检查该返回值?
 
我就是这么用的 好像没有别的方法了
 
咳,我现在这样做了,
COM内:
function TBusinessServer.SaveNodeInfo(var Data: OleVariant;
out ErrStr: WideString): HResult;
var
DeltaAgent: TDeltaAgent;
begin
Result := 0;
DeltaAgent := TDeltaAgent.Create(Self.FQuery,Data);
try
Self.FConnection.begin
Trans;
try
DeltaAgent.ModifyByDelta1('TBLUnitInfo',[usInserted,usModified,usDeleted]);
Self.FConnection.CommitTrans;
Result := 1;
except
on E:Exceptiondo
begin
Self.FConnection.RollbackTrans;
ErrStr := E.Message;
Result := 0;
end;
end;
finally
DeltaAgent.Free;
end;
end;
客户端调用:
procedure TdlgNodeInfo.acSaveExecute(Sender: TObject);
var
Data: OleVariant;
ICom: IBusinessServer;
ErrStr: WideString;
begin
if cdsNodeInfo.State<> dsBrowse then
cdsNodeInfo.Post;
if cdsNodeInfo.ChangeCount>0 then
begin
if ScanValidInfo=False then
Exit;
Data := cdsNodeInfo.Delta;
if not VarIsEmpty(Data) then
begin
ICom := dmBusinessData.GetIBusinessServer;
try
if ICom.SaveNodeInfo(Data,ErrStr)=0 then
raise Exception.Create(ErrStr);
finally
dmBusinessData.FreeIBusinessServer(ICOM);
end;
Application.MessageBox('已经保存','提示',MB_ICONINFORMATION);
acClose.Execute;
end;
end;
end;
 
对,我也是这样干的——
如果是数据库自己触发的异常,那就可以直接返回。
自己定义的异常就只有这样了——
 
>>来自:hongxing_dl, 时间:2003-12-22 10:00:00, ID:2368386
>>对,我也是这样干的——
>>
>>如果是数据库自己触发的异常,那就可以直接返回。
>>自己定义的异常就只有这样了——
数据库自己触发的异常,就可以直接返回?
就是说,你将它忽略了?
 
不是忽略,是它自己都会触发——
http://delphibbs.com/delphibbs/dispq.asp?lid=2241550
 
>>来自:hongxing_dl, 时间:2003-12-22 10:22:00, ID:2368449
>>不是忽略,是它自己都会触发——
>>
>>http://delphibbs.com/delphibbs/dispq.asp?lid=2241550
那是服务端啊,
的确会出错,
对于客户端来说,
只是“COM方法”不能正确执行,
但是获取不了“错误信息”啊,
 
多人接受答案了。
 
顶部