我正在使用的系统包括:
应用程序调用第一个dll,第一个dll从第二个dll调用不同的方法
为了使第一个dll能够看到并调用C#代码,我遵循了本指南:
http://support.microsoft.com/kb/828736
唯一的区别是我没有使用/ clr编译:OldSyntax,如果我这样做,那么更改其他相关的编译选项会使第一个dll从应用程序中错误地加载。
一切顺利汇编;整个设置最初工作得很好,但是在完全开发我的代码后,我现在在应用程序中出现错误。错误是:
运行时错误'-2147417848(80010108)':
自动化错误
调用的对象已与其客户端断开连接。
当在第一个dll中执行以下行时发生:
MyManagedInterfacePtr ptrName(__uuidof(MyManagedClass));
我尝试重现完全正常的设置,但没有成功。
关于我是如何设法做到这一点的任何想法? 或者也可以选择其他方法让两个dll一起工作?
提前致谢!
答案 0 :(得分:1)
这是与RPC相关的低级别COM错误。通常在进程外服务器中使用,但这听起来不像您的设置。如果从另一个线程调用COM接口,也可以使用它。一个可能的原因是允许创建COM对象的线程退出,调用CoUninitialize并拆除COM对象。从另一个线程进行的后续调用将生成此错误。引用计数错误(经常调用Release)也可能导致这种情况。
通过仔细跟踪哪些线程创建COM对象以及它们存活了多长时间来解决这个问题。