Holy cow, I wrote a book!
This is a sure sign that you didn't register your CLSID properly;
most likely you forgot to set your threading model properly.
(And if you fail to specify a threading model at all, then
you get the dreaded "main" threading model.)
If somebody tries to create a COM object from a thread whose
model is incompatible with the threading model of the
COM object, then a whole bunch of marshalling stuff kicks in.
And if the marshalling stuff isn't there, then COM can't use your
a long and very technical article in MSDN on COM threading models
which has lots of scary-looking diagrams and tables.
In particular, the second scary table in the
"In-process servers: (almost) totally dependent on their clients"
chapter lists all the combinations of thread models with object
threading models, and what COM tries to do in each case.
In particular, notice that if you have a (mistakenly marked) "main"-threaded
object and somebody on any thread other than the main thread
tries to create it, marshalling will try to kick in.