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

从本机visual c+;调用c#.dll+;代码,c#,visual-c++,com,clr,C#,Visual C++,Com,Clr,我使用的系统包括: 最有可能用VB或VC++编写的前端应用程序(不知道、不知道、也不可能有它的源代码) 非托管VC++.dll 一个C#.dll 应用程序调用第一个dll,第一个dll调用与第二个dll不同的方法。 为了使第一个dll能够查看和调用C代码,我遵循以下指南: 唯一的区别是我没有使用/clr:OldSyntax进行编译,如果我使用/clr:OldSyntax进行编译,那么更改其他相关编译选项会导致从应用程序错误加载第一个dll 一切顺利;整个设置最初甚至运行良好,但是在跨两个D

我使用的系统包括:

  • 最有可能用VB或VC++编写的前端应用程序(不知道、不知道、也不可能有它的源代码)
  • 非托管VC++.dll
  • 一个C#.dll
应用程序调用第一个dll,第一个dll调用与第二个dll不同的方法。
为了使第一个dll能够查看和调用C代码,我遵循以下指南:
唯一的区别是我没有使用/clr:OldSyntax进行编译,如果我使用/clr:OldSyntax进行编译,那么更改其他相关编译选项会导致从应用程序错误加载第一个dll

一切顺利;整个设置最初甚至运行良好,但是在跨两个DLL完全开发代码之后,我现在在应用程序中遇到了一个错误。错误是:

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

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

MyManagedInterfacePtr ptrName(__uuidof(MyManagedClass));
我试图复制一个完全工作的设置,但没有成功

你知道我一开始是怎么做到的吗? 或者采用其他方法使两个DLL协同工作


提前谢谢

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


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

谢谢您的回答,因为对于我来说调试DLL的应用程序是不可能的,所以我最终将C代码转换为非托管C++。我花了几天时间,但最后一切都很顺利。