-
c# 마샬링Programing/C# 2011. 7. 1. 15:05
[Serializable]
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct PLCPS01{
public short SubHeader;
public short DataLength;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public char[] TransactionCode;
public double EE020_WH;
}
public byte[] RawSerialize(Type dataType) // 구조체를 바이트배열로
{
int RawSize = Marshal.SizeOf(dataType);IntPtr buffer = Marshal.AllocHGlobal(RawSize);
Marshal.StructureToPtr(TestData, buffer, false);
byte[] RawData = new byte[TestDataSize];
Marshal.Copy(buffer, RawData, 0, TestDataSize);
Marshal.FreeHGlobal(buffer);return RawData;
}
// 바이트배열을 구조체로public object RawDeSerialize(byte[] data, Type dataType)
{
int RawSize = Marshal.SizeOf(dataType);if (RawSize > data.Length)
return null;IntPtr buffer = Marshal.AllocHGlobal(RawSize);
Marshal.Copy(data, 0, buffer, RawSize);
object objData = Marshal.PtrToStructure(buffer, dataType);
Marshal.FreeHGlobal(buffer);return objData;
}
TestData = new PLCPS01();
TestDataSize = Marshal.SizeOf(TestData);
DataByte = new byte[TestDataSize];
DataByte = RawSerialize(TestData.GetType());
'Programing > C#' 카테고리의 다른 글
DispatcherTimer 현재 시간 갱신 (1) 2010.11.05 c# 에서의 using (0) 2009.04.24 KeyValuePair 사용하기 (0) 2009.04.09 추상클래스(Adstract Calss) (0) 2009.03.29 Invoke() 메서드 (0) 2009.03.20 스트림(Stream) (0) 2009.03.19 스레드 사용하기 (0) 2009.03.19 연결형 스트림 소켓과 비연결형 데이터그램 소켓 (0) 2009.03.18 IPHostEntry 와 IPEndPoint (0) 2009.03.18 생성자에서의 this 와 base (0) 2008.08.27