C#的結構(struct)中使用陣列(array) 對應 C++的結構(struct)

C#的結構(struct)中使用陣列(array) 對應 C++的結構(struct)

C#的結構(struct)中使用陣列(array) 對應 C++的結構(struct)

資料來源:http://codingjames.blogspot.tw/2009/08/cstructarray.html

 

C#是物件導向的語言,所以並不建議在其中使用結構
需要使用的時候最好儘量使用類別(class)來取代

不過有時候還是會需要定義結構,比如使用前人定義出的結構時
為了要和非.net(unmanagement)的程式庫(dll)溝通
還是需要定義出符合原本定義的結構,如果都只用到一些共通的形態的話
那在C#和C++中的定義基本上是一樣的

以下的範例(版主實際應用):
C#:
    public struct CardInfo
    {
        public int intType;//卡片類型
        public int intUsage;//卡片用途
        public int intConfiguration;//延伸資料類型

        public int intPassThroughCounter;//通行次數
        public int intHolidayWeekProgramValue;//周計畫+假日通行設定

        public int intStartExpirationDate;//卡片有效期限設定
        public int intEnd1eExpirationDate;//卡片有效期限設定
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 17)]
        public string strStartExpirationDate;//’YYYYMMddHHmm’
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 17)]
        public string strEndleExpirationDate;//’YYYYMMddHHmm’

        public int intFirstPassThroughTimeRange;//可通行時段
        public int intSecondPassThroughTimeRange;//可通行時段
        public int intThirdPassThroughTimeRange;//可通行時段

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 17)]
        public string strUserUniqueIdentifier;//用戶識別碼 “AAAAAAAA”(PS長度和原本不同)
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)]
        public string strScramblerCode;//擾碼設定 “aaaa”(PS長度和原本不同)

        //———————————————————–
        //延伸資料
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 9)]
        public string strUserPasswordCode;//使用者密碼設定 “12345678”(單一個)

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 9)]
        public string strDoorName1;//門區名稱設定(使用類似ArrayList方式存取) GWC_DOOR_NAME_LENGTH_MAXIMUM=8
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 9)]
        public string strDoorName2;//門區名稱設定(使用類似ArrayList方式存取) GWC_DOOR_NAME_LENGTH_MAXIMUM=8
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 9)]
        public string strDoorName3;//門區名稱設定(使用類似ArrayList方式存取) GWC_DOOR_NAME_LENGTH_MAXIMUM=8
        public int intDoorNameSize;//紀錄SIZE

        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1152)]//http://codingjames.blogspot.tw/2009/08/cstructarray.html
        public int []intDoorAccess;//new int[1152];//門區群組設定(使用類似ArrayList方式存取) MAX=1152
        public int intDoorAccessSize;//紀錄SIZE
    }

C++:
    typedef struct _CardInfo
    {
        int intType;//卡片類型
        int intUsage;//卡片用途
        int intConfiguration;//延伸資料類型

        int intPassThroughCounter;//通行次數
        int intHolidayWeekProgramValue;//周計畫+假日通行設定

        int intStartExpirationDate;//卡片有效期限設定
        int intEnd1eExpirationDate;//卡片有效期限設定
        char strStartExpirationDate[17];//’YYYYMMddHHmm’
        char strEndleExpirationDate[17];//’YYYYMMddHHmm’

        int intFirstPassThroughTimeRange;//可通行時段
        int intSecondPassThroughTimeRange;//可通行時段
        int intThirdPassThroughTimeRange;//可通行時段

        char strUserUniqueIdentifier[17];//用戶識別碼 “AAAAAAAA”(PS長度和原本不同)
        char strScramblerCode[5];//擾碼設定 “aaaa”(PS長度和原本不同)

        //———————————————————–
        //延伸資料
        char strUserPasswordCode[9];//使用者密碼設定 “12345678”(單一個)

        char strDoorName1[9];//門區名稱設定(使用類似ArrayList方式存取) GWC_DOOR_NAME_LENGTH_MAXIMUM=8
        char strDoorName2[9];//門區名稱設定(使用類似ArrayList方式存取) GWC_DOOR_NAME_LENGTH_MAXIMUM=8
        char strDoorName3[9];//門區名稱設定(使用類似ArrayList方式存取) GWC_DOOR_NAME_LENGTH_MAXIMUM=8
        int intDoorNameSize;//紀錄SIZE

        int intDoorAccess[1152];//門區群組設定(使用類似ArrayList方式存取) MAX=1152
        int intDoorAccessSize;//紀錄SIZE
    }CardInfo;

  

 

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *