读书人

请教怎么将c++ dll中的 char *用c#来改

发布时间: 2013-01-20 10:22:40 作者: rapoo

请问如何将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);

读书人网 >C#

热点推荐