COM中的异常

Exceptions in COM

本文关键字:异常 COM      更新时间:2023-10-16

我正在用COM代码编写一个接口,并且我知道这个接口的唯一用户是我自己的代码(间接地)。如果我抛出一个异常,我能在库的另一边,也就是在中间的地方,捕捉到它吗?这是一个终止条件,因此世界上最优雅的清理不是有史以来最大的交易。

异常不允许流过COM接口边界。因为c++异常没有二进制契约,COM不能将它们从一个线程封送到另一个线程。这现在可能不是一个大问题,但如果你决定改变你的COM对象的线程模型,这可能是一个问题。

此外,如果你决定要用c#(或Delphi或其他)重写应用程序的前端,会发生什么?COM HRESULTS可以被各种COM互操作框架理解,但c++异常不能(c++异常没有二进制合约)。