急,有关COM中的异常处理,safecall和stdcall,Idispatch

rustle 2003-12-04 05:33:23
急,有关COM中的异常处理,safecall和stdcall,Idispatch

safecall必须应用于继承自IDispatch的接口的方法,这样Delphi可以使异常传递而不依赖于HResult

我想在我的COM Object中使用safecall的方式,请问我应该如何去实现IDispatch中定义的方法?使用safecall的方式会有什么影响?

我需要做的是一组互相关联的Class/Interface,参数和返回值中都会传递我所定义的Interface,Delphi的Help中说:all method parameter and result types must be automatable. (The automatable types are Byte, Currency, Real, Double, Real48, Integer, Single, Smallint, AnsiString, ShortString, TDateTime, Variant, OleVariant, and WordBool.),会有问题吗?

另外,请问大家在使用Delphi作COM Object的时候会如何去规划异常?有没有一个合适的通用做法?

不知道说清楚没有 :(
...全文
48 点赞 收藏 5
写回复
5 条回复
sz1008 2003年12月05日
safecall和stdcall到底区别在哪儿?
safecall=stdcall + HResult;

我需要做的是一组互相关联的Class/Interface,参数和返回值中都会传递我所定义的Interface,Delphi的Help中说:all method parameter and result types must be automatable. (The automatable types are Byte, Currency, Real, Double, Real48, Integer, Single, Smallint, AnsiString, ShortString, TDateTime, Variant, OleVariant, and WordBool.),会有问题吗?
作好对应的类型转换的话是不会有问题的
回复 点赞
rustle 2003年12月05日
halfdream(哈欠) ,多谢关注

明白了一点儿

还不是很清楚

safecall和stdcall到底区别在哪儿?
回复 点赞
eastliangliang 2003年12月05日
我一直用自动化对象,懒惰啊,虽然效率上损失点,可是系统小,看不出影响。
关注一下。
回复 点赞
shsunb 2003年12月04日
……
try
……
except
on E: Exception do
raise Exception.Create('哇,有异常!请看:[' + E.Message + '],请稍后重试。');
end;
回复 点赞
halfdream 2003年12月04日
一,我觉得没有什么太麻烦的,也许是没有理解到你的意思..
STDCALL返回的东西我都会OLECHECK检查一下返回值的.

二,干脆让COM组件支持自动化有什么不好呢?
你写的COM继承于TAutoIntfObject或TAUTOOBJECT,也不会增加代码量.
不会有什么影响.

三,让接口在参数中传递也是常用的...




回复 点赞
发动态
发帖子
网络通信/分布式开发
创建于2007-08-02

924

社区成员

3.3w+

社区内容

Delphi 网络通信/分布式开发
社区公告
暂无公告