views:

48

answers:

1

Hello, the system I'm working with consists of:

  • A front-end application written in most likely VB or else VC++ (don't know, don't and can't have the sources for it)
  • An unmanaged VC++ .dll
  • A C# .dll

The application calls the first dll, the first dll calls different methods from the second one.
In order to make the first dll able to see and call the C# code I followed this guide: http://support.microsoft.com/kb/828736
The only difference is that i am not compiling with /clr:OldSyntax, if I do then changing the other dependant compiling options makes the first dll load incorrectly from the application.

Everything compiles smoothly; the whole setup even worked fine initially, however after completely developing my code across the two dlls I now get an error in the application. The error is:

Run-time error '-2147417848 (80010108)':
Automation Error
The object invoked has disconnected from its clients.

And occurs when the following line is executed in the first dll:

MyManagedInterfacePtr ptrName(__uuidof(MyManagedClass));

I tried reproducing a fully working setup but without success.

Any ideas on how the heck I managed to do it in the first place? Or alternatively on other approaches for making the two dlls work together?

Thanks in advance!

+1  A: 

It is a low-level COM error, associated with RPC. That gets normally used in out-of-process servers, but that doesn't sound like your setup. It would also be used if you make calls on a COM interface from another thread. One possible cause is that the thread that created the COM object was allowed to exit, calling CoUninitialize and tearing down the COM object. A subsequent call made from another thread would generate this error. Getting reference counting wrong (calling Release too often) could cause this too.

Tackle this by carefully tracing which threads create a COM object and how long they survive.

Hans Passant
Thanks for your answer, since for me it was impossible to debug the application calling the DLL, I ended up rewriting the C# code to unmanaged C++. It took me a couple of days but in the end everything worked fine.
Spookyone