COM中的例外情况

Pup*_*ppy 3 c++ com exception

我正在编写一个带有COM代码的接口,我知道这个接口的唯一用户是我自己的代码(间接).如果我抛出异常,我可以在中间的库的另一侧捕获它吗?这是一个终止条件,所以世界上最优雅的清理并不是有史以来最大的交易.

Rei*_*man 8

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

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

  • 我想指出,通常很难找到像这样的错误.我已经看到了一些场景,从刚刚陷入火焰的过程到模糊的E_xxx返回码,表明在编组过程中出现了错误.不参与COM竞技场上的COM规则就是要求一个paine的世界...... (2认同)