读书人

C#中怎么调用一个这样的C++ DLL

发布时间: 2011-12-25 23:21:20 作者: rapoo

C#中如何调用一个这样的C++ DLL?
各位达人,小弟最近编程时要用到一用VC6写的DLL,其中有一个接口不知该如何调用,其原型如下:

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

偶知道C#中可以将void*转化成IntPtr,char*转化成StringBuilder,int&转化成out int。

~~但是~~,char**我不会转化。:(
我在C#中这样对上面的char** pWord参数处理:(这里的char** pWord在DLL中是一个N*N的数组。)

ArrayList pWord = new ArrayList(N);
for (int i = 0; i < N; i++)
{
pWord.Add(new char[N]);
}

然后将C#中的声明写为:

[DllImport( "IRLAS.dll ")]
public static extern void WordSegment_dll(IntPtr pSegger, string line, ArrayList pWord, out int wordNum);

编译可以通过,但运行时会抛出AccessViolationException异常:“受保护的内存被破坏”。

我觉得这样的类型转换可能有问题,但不知道应该怎么写。请达人们指教!
小弟跪谢!

[解决办法]
IntPtr pWord = new IntPtr[N];
for (int i = 0; i < len; i++)
{
pWord[i] = Marshal.AllocHGlobal (N);


}
试一试

读书人网 >C#

热点推荐