日期:2014-05-18  浏览次数:20788 次

win 7 环境下 C#调用C++的DLL以读取共享内存的内容报错
C#调用C++的DLL以读取共享内存的内容 ,在XP和SERVER2003没有问题,但在WIN7中就提示

未处理 System.AccessViolationException
Message=尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
Source=mscorlib
StackTrace:
在 Microsoft.Win32.Win32Native.CoTaskMemFree(IntPtr ptr)

……


我猜想应该是跟WIN7的权限有关,但设置了对DLL的读取权限还是不可以,请各位高手帮忙

具体的代码如下

C#

声明
  [DllImport("RLib.dll")]
  private static extern bool RLib_GetAlarmCount(ref string resultText);

调用

  string resultText = string.Empty;

  RLib_GetAlarmCount( ref resultText)

C++的函数声明如下
extern "C" RLIBINTERFACE_DLL_API BOOL APIENTRY
 RLib_GetAlarmCount(char** data);


------解决方案--------------------
我觉得参数不该是ref string resultText

而是StringBuilder(必须先分配)或intptr(返回后在解读)