2

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 Answer 1

1

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.

Sign up to request clarification or add additional context in comments.

1 Comment

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.