/// <summary> /// 读取变量的数据 /// </summary> /// <param name="fileData">文件数据</param> /// <param name="variableInfo">需要读取的变量信息</param> /// <returns>变量的数据</returns> public static T[] GetVariableData <T>(byte[] fileData, MatVariableInfo variableInfo) where T : IComparable { if (fileData == null || fileData.Length == 0) { return(null); } try { IntPtr retptr = IntPtr.Zero; int datasize = 0; //返回的是byte大小 if (CommonMethod.Is64BitVersion()) { retptr = MATGetVariableData64(fileData, fileData.Length, ref variableInfo, ref datasize); } else { retptr = MATGetVariableData32(fileData, fileData.Length, ref variableInfo, ref datasize); } if (retptr == IntPtr.Zero) { return(null); } //按照数据类型来拷贝返回数据 int typesize = Marshal.SizeOf(typeof(T)); if ((datasize % typesize) != 0) { Marshal.FreeCoTaskMem(retptr); return(null); } datasize = datasize / typesize; return(CommonMethod.CopyDataArrayFromIntptrAndFree <T>(ref retptr, datasize)); } catch (Exception ex) { ErrorString = ex.Message; return(null); } }
private static extern IntPtr MATGetVariableData64(byte[] fileData, int fileSize, ref MatVariableInfo variableInfo, ref int outDataSize);