我正在编写一个带有COM代码的接口,我知道这个接口的唯一用户是我自己的代码(间接)。如果我抛出异常,我可以在中间的库的另一侧捕获它吗?这是一个终止条件,所以世界上最优雅的清理并不是有史以来最大的交易。
答案 0 :(得分:8)
不允许异常流过COM接口边界。因为没有C ++异常的二进制契约,所以COM不能将它们从一个线程封送到另一个线程。现在这可能不是一个大问题,但如果您决定更改COM对象的线程模型,可能会在以后遇到问题。
此外,如果您决定要在C#(或Delphi或其他)中重写应用程序的前端会发生什么? COM HRESULTS被各种COM互操作框架理解,但C ++异常不是(没有C ++异常的二进制契约)。