
Antony Polukhin wrote:
Actually, it's the other way around: everything is async-signal unsafe https://msdn.microsoft.com/en-us/en-en/library/xdkz3x12.aspx :
"Do not use any function that generates a system call (for example, _getcwd or time)."
There are no signals on Windows. They just don't exist. The signal function is provided by the C runtime and emulates signals. The closest thing to a signal are the Ctrl+C and Ctrl+Break keyboard interrupts, and they spawn a new thread to call the handler, instead of reusing one as a POSIX signal would do.
Anyway, if you do not wish to use C++ runtime after a crash, you definitely would not like to use COM in that place (so std::string in the interface does not make a big difference).
The runtime and COM have nothing in common. If your program crashes somewhere in the runtime, the runtime may be unusable from that point on, but this does not affect COM at all. And if you crash somewhere in a COM component, that particular component may or may not be usable from that point on, but this does not necessarily affect COM as a whole. You can still use COM.