public override byte[] Export() { uint nExportSize = 8; uint nDindex = 0; byte[] retBytes = null; byte[] bytes = null; uint nLen = 0; if (m_Data != null) { for (uint i = 0; i < m_Data.Count; i++) { if (m_Data[i] == null) { continue; } CUniStruct <T> vrItem = (CUniStruct <T>)m_Data[i]; nExportSize += vrItem.ExportSize(); nLen++; } } retBytes = new byte[nExportSize]; CUniStruct <T> .uint2byte((uint)UNISMAG.UNISARRAY, ref retBytes, nDindex); nDindex += 4; CUniStruct <T> .uint2byte((uint)nLen, ref retBytes, nDindex); nDindex += 4; if (m_Data != null) { for (uint i = 0; i < m_Data.Count; i++) { if (m_Data[i] == null) { continue; } CUniStruct <T> vrItem = (CUniStruct <T>)m_Data[i]; bytes = vrItem.Export(); Array.Copy(bytes, 0, retBytes, nDindex, bytes.Length); nDindex += (uint)bytes.Length; } } return(retBytes); }
public uint Export(T srcObj, bool bHavMag, ref byte[] pOut, uint _nIndex) { if (srcObj == null || pOut == null || pOut.Length < _nIndex + 4) { return(0); } Type t = srcObj.GetType(); FieldInfo[] fiarr = t.GetFields(); if (fiarr == null) { return(0); } uint nIndex = _nIndex; if (bHavMag) { uint2byte((uint)UNISMAG.UNISTRUCT, ref pOut, nIndex); nIndex += 4; } CUniStruct <object> pUnkownObj = new CUniStruct <object>(); uint nCount = (uint)fiarr.GetLength(0); for (uint i = 0; i < nCount; i++) { object poValue = fiarr[i].GetValue(srcObj); Type itt = fiarr[i].FieldType; if ((poValue != null) && ((itt == typeof(UniSZ)) || (itt == typeof(UniDW)))) { UniVarItem puiValue = (UniVarItem)poValue; if (!puiValue.IsValid()) { continue; } } if (itt == typeof(UniSZ)) { if (pOut.Length < nIndex + 4) { return(0); } if (poValue != null) { UniSZ pValue = (UniSZ)poValue; uint2byte((uint)pValue.m_dwType, ref pOut, nIndex); nIndex += 4; if (!pValue.IsEmpty() && !pValue.IsLock()) { if (pOut.Length < nIndex + pValue.Size()) { return(0); } Array.Copy(pValue.Get(), 0, pOut, nIndex, pValue.Size()); nIndex += pValue.Size(); } } else { uint2byte((uint)UTFLAG.DEFUNISZTYPE, ref pOut, nIndex); nIndex += 4; } } else if (itt == typeof(UniDW)) { if (pOut.Length < nIndex + 4) { return(0); } if (poValue != null) { UniDW pValue = (UniDW)poValue; uint2byte((uint)pValue.m_dwType, ref pOut, nIndex); nIndex += 4; if (!pValue.IsEmpty() && !pValue.IsLock()) { if (pOut.Length < nIndex + 4) { return(0); } uint2byte((uint)pValue.m_dwValue, ref pOut, nIndex); nIndex += 4; } } else { uint2byte((uint)UTFLAG.DEFUNIDWTYPE, ref pOut, nIndex); nIndex += 4; } } else { uint nSize = pUnkownObj.Export(poValue, false, ref pOut, nIndex); nIndex += nSize; } } return(nIndex - _nIndex); }