2010-09-21 74 views
2

我一起工作的系统包括:调用C#的.dll ++代码

  • 一个前端应用程序写在最有可能的VB或者VC++(不知道,不要”吨,并且可以不具有用于它的源)
  • 非托管VC++的.dll
  • AC#.dll文件

应用程序调用第一DLL中,第一DLL调用从第二个不同的方法。
为了使第1个DLL能够看到和调用C#代码,我遵循这个指南: http://support.microsoft.com/kb/828736
唯一的区别是,我不使用/ clr编译:OldSyntax,如果我那么做改变其他依赖编译选项会使第一个dll从应用程序加载不正确。

一切顺利编译;整个安装程序甚至在最初工作得很好,但是在完成两个DLL的代码完全开发之后,我现在在应用程序中出现错误。错误是:

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

当以下行的第1个DLL执行情况:

MyManagedInterfacePtr ptrName(__uuidof(MyManagedClass)); 

我试图重现一个完全工作的设置,但没有成功。

任何关于如何设法做到这一点的想法? 或者在其他方法使两个dll一起工作?

在此先感谢!

回答

1

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

通过仔细追踪哪些线程创建COM对象以及它们能够存活多久来解决此问题。

+0

感谢您的回答,因为对我来说,调试调用DLL的应用程序是不可能的,我最终将C#代码重写为非托管C++。这花了我几天,但最终一切正常。 – Spookyone 2010-10-07 16:21:37