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);
}
试一试