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

posted @ 2021-03-11 20:42  唐高高  阅读(1929)  评论(0)    收藏  举报