当前位置:  开发笔记 > 后端 > 正文

什么是安全的?

如何解决《什么是安全的?》经验,为你挑选了2个好方法。

我正在使用VB6创建一个ActiveX EXE,我得到的唯一例子都是用Delphi编写的.

阅读示例代码,我注意到有一些函数的签名后跟safecall关键字.这是一个例子:

function AddSymbol(ASymbol: OleVariant): WordBool; safecall;

这个关键字的目的是什么?



1> François..:

Safecall从左到右传递参数,而不是从左到右传递pascal或寄存器(默认)

使用safecall,过程或函数在返回时从堆栈中删除参数(如pascal,但不像cdecl那样由调用者决定)

Safecall实现了异常"防火墙"; esp on Win32,这实现了进程间COM错误通知.否则它将与stdcall(与win api一起使用的另一个调用约定)相同



2> Barry Kelly..:

此外,异常防火墙通过使用支持IErrorInfo的对象调用SetErrorInfo()来工作,以便调用者可以获得有关异常的扩展信息.这是通过TComObject和TAutoIntfObject中的TObject.SafeCallException覆盖来完成的.这两种类型都实现了ISupportErrorInfo来标记这一事实.

如果发生异常,safecall方法的调用者可以查询ISupportErrorInfo,然后查询其方法导致HRESULT(高位设置)失败的接口,如果返回S_OK,则GetErrorInfo()可以获取异常信息(描述,帮助等,以IErrorInfo实现的形式,由SafeCallException覆盖中的Delphi RTL 传递给SetErrorInfo().

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有