从本机visual c ++代码调用c#.dll

时间:2010-09-21 17:15:49

标签: c# visual-c++ com clr

我正在使用的系统包括:

  • 用很可能是VB或VC ++写的前端应用程序(不知道,不知道也不能有它的来源)
  • 非托管VC ++ .dll
  • C#.dll

应用程序调用第一个dll,第一个dll从第二个dll调用不同的方法 为了使第一个dll能够看到并调用C#代码,我遵循了本指南: http://support.microsoft.com/kb/828736
唯一的区别是我没有使用/ clr编译:OldSyntax,如果我这样做,那么更改其他相关的编译选项会使第一个dll从应用程序中错误地加载。

一切顺利汇编;整个设置最初工作得很好,但是在完全开发我的代码后,我现在在应用程序中出现错误。错误是:

  

运行时错误'-2147417848(80010108)':
  自动化错误
  调用的对象已与其客户端断开连接。

当在第一个dll中执行以下行时发生:

MyManagedInterfacePtr ptrName(__uuidof(MyManagedClass));

我尝试重现完全正常的设置,但没有成功。

关于我是如何设法做到这一点的任何想法? 或者也可以选择其他方法让两个dll一起工作?

提前致谢!

1 个答案:

答案 0 :(得分:1)

这是与RPC相关的低级别COM错误。通常在进程外服务器中使用,但这听起来不像您的设置。如果从另一个线程调用COM接口,也可以使用它。一个可能的原因是允许创建COM对象的线程退出,调用CoUninitialize并拆除COM对象。从另一个线程进行的后续调用将生成此错误。引用计数错误(经常调用Release)也可能导致这种情况。

通过仔细跟踪哪些线程创建COM对象以及它们存活了多长时间来解决这个问题。