请问SysUtils单元中的“GetSafeCallExceptionMsg”函数该怎样使用?

ttoomm 2004-07-02 03:24:25
它是个全局函数,可是我引用SysUtils单元,再调用它,编译时会有“Undeclared identifier: GetSafeCallExceptionMsg”的错误!

我是在一个“Safecall”约定的函数调用后,想通过“GetSafeCallExceptionMsg”函数得到里面的异常信息。
请问有什么办法,可以得到“Safecall”调用约定的函数里的异常信息?
...全文
123 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mydelphiworld 2004-08-28
  • 打赏
  • 举报
回复
^-^,
alphax 2004-07-03
  • 打赏
  • 举报
回复
>>我想得到调用它时产生的真实的异常信息,而不是那个始终是“灾难性错误”的信息!

不能够的,

通常该错误是由COM库返回的
你在客户端不能得到比灾难性的错误(E_UNEXPECTED)更多的信息,
你所能得到的信息,EOleException基本上提供了。
(当然,你的服务器端也可以返回这个错误,
因为这个错误码不是系统保留的,这里不说这个)

COM在通讯或者调度或者处理类型信息的过程中
遇到了一些意料以外的错误,它就可能返回E_UNEXPECTED错误
比如COM代理在调用你的服务器方法时遇到内存存取错误,
我以前刚学的时候遇到过好几回E_UNEXPECTED错误,后来熟悉了以后就少犯这些错误了,
至今忘了具体是些什么错误了

:)
ttoomm 2004-07-02
  • 打赏
  • 举报
回复
我没有办法将一个“Safecall”原型的函数改为“Stdcall”,因为它是一个实现双重接口的组件。我想得到调用它时产生的真实的异常信息,而不是那个始终是“灾难性错误”的信息!
ttoomm 2004-07-02
  • 打赏
  • 举报
回复
嗷——,没有看到这个指示字。
请问在windows下如何实现类似的功能?
如何得到“Safecall”调用约定的函数里的异常信息?
alphax 2004-07-02
  • 打赏
  • 举报
回复
GetSafeCallExceptionMsg只适用于linux,

在Windows下,是通过ICreateErrorInfo和IErrorInfo来传递异常信息的,
你可以GetErrorInfo API来获得异常的信息

通常,你调用了一个safecall的方法后返回你的代码以前,
Delphi内嵌的代码隐含调用CheckAutoResult来检查safecall方法的执行情况,
如果发生异常,Delphi把它转换成一个VCL的Exception:EOleException,你可以
通过截获EOleException来获得异常的信息,比如
try
IDontKnown.TheSafeCallMethod(aArguments);
except
on E: EOleException do
begin
//your code here
end;
end;

如果你想直接检查一个safecall调用,
那么,你不能够使用safecall原型,而要使用stdcall的原型,
这样你才可以获得HResult,得到了HResult以后,
如果你判定发生了异常,
你就可以调用GetErrorInfo进一步分析异常了

HResult := IDontKnown.TheSafeCallMethod(aArguments);
if HResult < 0 then
begin
GetErrorInfo(0, ErorrInfo);
//your code here
end;

通常,这对于一个safecall是不需要的
aiirii 2004-07-02
  • 打赏
  • 举报
回复
{$IFDEF LINUX}
function GetSafeCallExceptionMsg: String;
{$ENDIF}

簡單點是這樣的, 所以, 你會找不到
ttoomm 2004-07-02
  • 打赏
  • 举报
回复
在SysUtils单元的声明部分是有这个函数的(搜索一下便知),表明它应该是可以被其它单元使用的,可就是会出现如上错误!奇怪。
JavaD 2004-07-02
  • 打赏
  • 举报
回复
确实没有这个函数阿

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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