日期:2014-05-17  浏览次数:20914 次

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(返回后在解读)