> In reality FuncA is a normal function in an exe, and FuncB is a function on a COM interface
> (so FuncA actually calls CoCreateInstance before calling FuncB on the COM object).
> And inside FuncB, DoSomethingElse is actually an ADO function that i am calling
> on one of microsoft's ADO COM components.
> i do not think these details are relevent to my question ...
these details are *very* relevant to your question. the innermost scope of execution of a com object is an apartment. unless the thread in your exe and the com objects involved are in the same apartment (either the MTA or the same STA), remoting is involved. what looks like an object to you (what was returned by CoCreateInstance) would really be a proxy; the method call would be forwarded to another thread which is in the same apartment as the object on which the method is invoked. c++ exceptions cannot be thrown or caught across thread boundaries (there is a separate stack for each thread). to marshal exceptions across apartment boundaries, use the COM exception mechanism (IErrorInfo).
vijayan121 1,152 Posting Virtuoso