在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
带有指针数组的结构体不能直接转换为C#类型的结构体,转换起来有点麻烦
先定义出对应C++类型的C#结构体
public IntPtr group_array;//指向 user_group_t类型的指针
泛型函数实现转换功能 public static List<T> MarshalPtrToStructArray<T>(IntPtr p, int count)
调用方式 通常C++函数返回一个指向user_group_list类型的指针,在C#中可使用IntPtr ptrGroupList对应指针, 而user_group_list类型结构体内包含的内容是长度为 group_array_count,地址为 group_array 的数组 因为IntPtr不能如C++的指针一样进行 ptrGroupList++这样的操作,所以要访问其内部成员需要把它转换为数组或list 使用Marshal.PtrToStructure把指向结构体的指针转换为具体的结构体 user_group_list tructList = (user_group_list)Marshal.PtrToStructure(ptrStructGroupList, typeof(user_group_list)); 再使用泛型转换函数实现转换 List<user_group_t> listGroupTemp = MarshalPtrToStructArray<user_group_t>(structList.group_array, structList.group_array_count);
对于list的成员访问,就方便多了 欢迎大家提出更多更方便的转换方式
|
请发表评论