开发者

Calling a c# .dll from native visual c++ code

开发者 https://www.devze.com 2023-01-17 13:23 出处:网络
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)

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!


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消