日期:2014-05-17  浏览次数:21064 次

请问如何将c++ dll中的 char **用c#来改写
一般情况下 c+=中的*指针,可以用c#中的ref

比如,c++的字符串指针 char *name[12],是12个char型指针,

void getname( char **name )
{

}


那么在c#中,如何声明这样的函数?

------解决方案--------------------
private void getname(Intptr name)
{

}
------解决方案--------------------
往c传参很容易,直接传string[]就行了
------解决方案--------------------
  stirng *s="kkkkkk";

   调用:

     getname(s);
------解决方案--------------------
不能用string[],数组只能支持结构体数组,string是类,不是结构体。

这里因为是二级指针,因此用byte[]替代最佳:
[DllImport("<Unknown>", EntryPoint="getname")]
public static extern  void getname(byte[] name) ;

如果要转换到字符串,用Encoding类尝试即可。
------解决方案--------------------
char**相当于C#里面的char[][]。
------解决方案--------------------
可以使用string[],至于传出时数组为空的问题,应该在函数参数定义处添加[Out]特性
void getname( char **name )
在C#中应为
[DllImport("dll", EntryPoint="getname")]
public static extern  void getname([MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr), Out()]string[] name);