日期:2014-05-20  浏览次数:20870 次

.NET (C#)的EXE调用一个VC写的DLL(非托管)成功,但退出这个EXE时出错: .NET-BroadcastEvent。。。
.NET (C#)的EXE调用一个VC写的DLL(非托管)成功,但退出这个EXE时出错: .NET-BroadcastEvent。。。
以Debug方式运行程序时,调用这个DLL后,退出程序,在c:\Program Files\Microsoft Visual Studio 9.0\VC\include\comip.h 中的824行中断并抛出异常:
Unhandled exception at 0x765b8f09 in HighJump.AdvantagePlatform.Tools.AdvArch.exe: 0xC0000005: Access violation reading location 0x008c0b10.
该头文件的出错代码自然为:
 // Releases only if the interface is not null.
  // The interface is not set to NULL.
  //
  void _Release() throw()
  {
  if (m_pInterface != NULL) {
  m_pInterface->Release();
  }
  }

HighJump.AdvantagePlatform.Tools.AdvArch.exe 是我的EXE应用程序。

我想应该是.NET的代码调用非托管的DLL里,是通过COM来调用的,退出时需要释放,但调用计数器错了,具体怎么样搞不清楚。
我通过ImportDll来调用该DLL的函数后,无论是否执行GC.Collect();都是这样。


系统环境:
Windowns XP SP2 英文版
.NET Framework 2.0 (VS.NET 2008)
DLL是原来用VC6写的,移植到VC++.net上编译。

各位是否遇到过类似问题?能否给点提示。

------解决方案--------------------
关注!!
帮你顶!!
------解决方案--------------------
没遇见过,也可能是我写的COM有些简单.
------解决方案--------------------
应该是你的DLL里面有问题。释放内存那一块,你再仔细检查一下吧。
可能出现的问题:
(1)操作一个空指针