ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.