TRY / CATCH_ALL vs tentativa / captura

Uso o c ++ há algum tempo e estou familiarizado com o try / catch normal. No entanto, agora me encontro no Windows, codificando no VisualStudio para desenvolvimento COM. Várias partes do código usam coisas como:

TRY {
    ... do stuff
} CATCH_ALL(e) {
    ... issue a warning
}
END_CATCH_ALL;

Qual o sentido dessas macros? Que benefício eles oferecem sobre a tentativa / captura incorporada?

Eu tentei pesquisar isso no Google, mas é difícil pesquisar "try vs TRY".