Which one should I use?
catch (_com_error e)
or
catch (_com_error& e)
Also, note that, when using MFC, you may have to catch by pointer. Otherwise, @JaredPar's answer is the way you should normally go (and hopefully never have to deal with things that throw a pointer).