TRY / CATCH_ALL vs try / catch

Ich benutze C ++ für eine Weile, und ich bin vertraut mit normalen versuchen / fangen. Jetzt befinde ich mich jedoch unter Windows und programmiere in VisualStudio für die COM-Entwicklung. Einige Teile des Codes verwenden Dinge wie:

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

Was ist der Sinn dieser Makros? Welchen Nutzen bieten sie gegenüber dem integrierten Try / Catch?

Ich habe versucht, dies zu googeln, aber "try vs TRY" ist schwer zu suchen.