日期:2014-05-19  浏览次数:20811 次

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);


}
试一试