>Hit this HARD with DCOM, is there ANY way to neatly and without memory leak close a COM object if it errors?
Sure. TerminateProcess() will kill it off completely... It will work if the object is hung or the Window Message Queue is stalled - it doesn't matter. However, it's not a clean solution necessarily as tables and other open resources can potentially be corrupted.
However, I find this to be the best way to control server components because if you are running VFP code it will ultimately crash on occasion and TerminateProcess() is about the only mechanism I know how you can go on after such a failure in COM objects. It won't work with MTDLLs and it won't work with COM+, but it will with plain old EXE COM/DCOM components.