intptr

 

void WordSegment_dll(void* pSegger, char* str, char** pWord, int& wordNum);

 可以将void*转化成IntPtr,char*转化成StringBuilder,int&转化成out int。

char *p 中的p是一个指针 一个4字节的uint 这个地址是一连串Char的开始位置

char **p 的p也是一个指针 这个地址是一个N*N的 char的矩阵的开始地址
在内存中的情况 应该是一个N*N个连续的char
也就是说可以 把p看成是一个 有N*N个char 的一维char数组的开始地址
我认为转成IntPtr应该也可以

然后用
Marshal.Copy 方法 (IntPtr, Char[], Int32, Int32)
将数据从非托管内存指针复制到托管字符数组。
source
内存指针,从中进行复制。

destination
要复制到的数组。

startIndex
数组中 Copy 开始位置的从零开始的索引。

length
要复制的数组元素的数目

 

// 转换第0组
byte[] destArray = new byte[N];
Marshal.Copy(pWord[0], destArray, 0, N);
string destString = Encoding.GetEncoding("GB2312").GetString(destArray);
destString = destString.Remove(destString.IndexOf('\0'));

posted on 2009-03-09 00:56  hcmfys_lover  阅读(467)  评论(0编辑  收藏  举报