Common themes can be identified between Win32 and COM, including the need for manual checking against error conditions, leading to a huge number of branches in code bases. Furthermore, error codes are based on symbolic constants that can be hard to find, often leading to forgotten cases of error handling. Mixing those disadvantages with the need for manual resource handling in both cases only makes matters worse, often sacrificing block-based structured programming in favor of
goto statements to centralize resource cleanup. Improper cleanup often leads to memory problems that can be hard to track down.
Clearly, we can do better by introducing more structure to deal with exceptions. This is where structured exception handling comes ...