public static T[] CopyArray <T>(CallResultWrap r) { T[] ar = new T[r.element_count]; for (int i = 0; i < r.element_count; i++) { IntPtr ins = new IntPtr(r.value.ToInt64() + i * r.element_size); ar[i] = Marshal.PtrToStructure <T>(ins); } return(ar); }
public static T[] CopyPointerArray <T>(CallResultWrap r) { T[] ar = new T[r.element_count]; if (r.element_count == 0) { return(ar); } for (int i = 0; i < r.element_count; i++) { // memory : // T* data[] // T** p1 = &data[i]; // p2 = *p1 IntPtr p1 = new IntPtr(r.value.ToInt64() + i * IntPtr.Size);//r.element_size); IntPtr p2 = Marshal.PtrToStructure <IntPtr>(p1); ar[i] = Marshal.PtrToStructure <T>(p2); } return(ar); }