c#中遇到“尝试读取或写入受保护的内存”错误(100分)
在调用c++编写的dll(中文分词系统的dll)时遇到“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”的错误
这个dll就是那个很牛X的中科院中文分词系统的ICTCLAS30.dll,还是先看代码:
dll中的原型为:
1)、void ICTCLAS_ParagraphProcessAW(int nCount,result_t * result);//得到分词结果,如“北京欢迎您”被分为result[0]:北京,result[1]:欢迎,result[2]:您
2)、int ICTCLAS_KeyWord(result_t * resultKey, int &nCountKey);//得到result中的weight权重(分词词典中查询可得到权重)
这其中的result_t是一个结构,c#中定义为:
public struct result_t { [FieldOffset(0)] public int start; [FieldOffset(4)] public int length; [FieldOffset(8)] public int sPos; [FieldOffset(12)] public int sPosLow; [FieldOffset(16)] public int POS_id; [FieldOffset(20)] public int word_ID; [FieldOffset(24)] public int word_type; [FieldOffset(28)] public int weight;//这些是用来放一个词如“欢迎”的各种特点,上面所说的 //ICTCLAS_KeyWord功能是得到词的weight即权重 }
[DllImport(path,CharSet=CharSet.Ansi,EntryPoint="ICTCLAS_ParagraphProcessAW")] static extern void ICTCLAS_ParagraphProcessAW(int nCount, [ Out,MarshalAs(UnmanagedType.LPArray)] result_t[] result);// [DllImport(path, CharSet = CharSet.Ansi, EntryPoint = "ICTCLAS_KeyWord")] static extern int ICTCLAS_KeyWord([Out, MarshalAs(UnmanagedType.LPArray)] result_t[] result, int nCount);