c#调用C/C++指向指针char**数据类型
c/c++指向指针char**对应c#数据类型IntPtr。
数据赋值如下:
var musicArr = musicFile.Text.Split(',');
int count = musicArr.Length;
//返回非托管类型的大小(以字节为单位)。
int elementSize = Marshal.SizeOf(typeof(IntPtr));
//通过使用指定的字节数,从进程的非托管内存中分配内存。
IntPtr ptr = Marshal.AllocHGlobal(musicArr.Length * elementSize);
for (int i=0;i<count;i++)
{
//将托管的内容复制 System.String 到非托管内存中,并在复制转换为 ANSI 格式。
IntPtr temp = Marshal.StringToHGlobalAnsi(musicArr[i]);
//按指定的偏移量将一个处理器本机大小的整数值写入非托管内存。
Marshal.WriteIntPtr(ptr,i* elementSize, temp);
//释放内存
Marshal.FreeHGlobal(temp);
}
//调用c/c++函数
var ret=lb_start_broadcast_file(ip.Text,Convert.ToInt32(hostId.Text), extensionIds, extensionIds.Length, ptr, musicArr.Length,Convert.ToInt32(musicCount.Text));
//释放内存
Marshal.FreeHGlobal(ptr);

浙公网安备 33010602011771号