<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    heting

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      40 隨筆 :: 9 文章 :: 45 評論 :: 0 Trackbacks

     

    C++            C#
    =====================================
    WORD            
    ushort
    DWORD            
    uint
    UCHAR            
    int/byte   大部分情況都可以使用int代替,而如果需要嚴格對齊的話則應該用bytebyte 
    UCHAR
    *            string/IntPtr
    unsigned 
    char*         [MarshalAs(UnmanagedType.LPArray)]byte[]/?(Intptr)
    char*            string
    LPCTSTR            
    string
    LPTSTR            [MarshalAs(UnmanagedType.LPTStr)] 
    string
    long            int
    ulong               uint
    Handle            IntPtr
    HWND            IntPtr
    void*            IntPtr
    int            int
    int*            ref int
    *int            IntPtr
    unsigned 
    int        uint
    COLORREF                
    uint 

     

     

    API與C#的數據類型對應關系表 
    API數據類型 類型描述 C#類型 API數據類型 類型描述 C#類型 
    WORD 16位無符號整數 
    ushort CHAR 字符 char 
    LONG 32位無符號整數 
    int DWORDLONG 64位長整數 long 
    DWORD 32位無符號整數 
    uint HDC 設備描述表句柄 int 
    HANDLE 句柄,32位整數 
    int HGDIOBJ GDI對象句柄 int 
    UINT 32位無符號整數 
    uint HINSTANCE 實例句柄 int 
    BOOL 32位布爾型整數 
    bool HWM 窗口句柄 int 
    LPSTR 指向字符的32位指針 
    string HPARAM 32位消息參數 int 
    LPCSTR 指向常字符的32位指針 String LPARAM 32位消息參數 
    int 
    BYTE 字節 
    byte WPARAM 32位消息參數 int 


     

     

     

    BOOL
    =System.Int32
    BOOLEAN
    =System.Int32
    BYTE
    =System.UInt16
    CHAR
    =System.Int16
    COLORREF
    =System.UInt32
    DWORD
    =System.UInt32
    DWORD32
    =System.UInt32
    DWORD64
    =System.UInt64
    FLOAT
    =System.Float
    HACCEL
    =System.IntPtr
    HANDLE
    =System.IntPtr
    HBITMAP
    =System.IntPtr
    HBRUSH
    =System.IntPtr
    HCONV
    =System.IntPtr
    HCONVLIST
    =System.IntPtr
    HCURSOR
    =System.IntPtr
    HDC
    =System.IntPtr
    HDDEDATA
    =System.IntPtr
    HDESK
    =System.IntPtr
    HDROP
    =System.IntPtr
    HDWP
    =System.IntPtr
    HENHMETAFILE
    =System.IntPtr
    HFILE
    =System.IntPtr
    HFONT
    =System.IntPtr
    HGDIOBJ
    =System.IntPtr
    HGLOBAL
    =System.IntPtr
    HHOOK
    =System.IntPtr
    HICON
    =System.IntPtr
    HIMAGELIST
    =System.IntPtr
    HIMC
    =System.IntPtr
    HINSTANCE
    =System.IntPtr
    HKEY
    =System.IntPtr
    HLOCAL
    =System.IntPtr
    HMENU
    =System.IntPtr
    HMETAFILE
    =System.IntPtr
    HMODULE
    =System.IntPtr
    HMONITOR
    =System.IntPtr
    HPALETTE
    =System.IntPtr
    HPEN
    =System.IntPtr
    HRGN
    =System.IntPtr
    HRSRC
    =System.IntPtr
    HSZ
    =System.IntPtr
    HWINSTA
    =System.IntPtr
    HWND
    =System.IntPtr
    INT
    =System.Int32
    INT32
    =System.Int32
    INT64
    =System.Int64
    LONG
    =System.Int32
    LONG32
    =System.Int32
    LONG64
    =System.Int64
    LONGLONG
    =System.Int64
    LPARAM
    =System.IntPtr
    LPBOOL
    =System.Int16[]
    LPBYTE
    =System.UInt16[]
    LPCOLORREF
    =System.UInt32[]
    LPCSTR
    =System.String
    LPCTSTR
    =System.String
    LPCVOID
    =System.UInt32
    LPCWSTR
    =System.String
    LPDWORD
    =System.UInt32[]
    LPHANDLE
    =System.UInt32
    LPINT
    =System.Int32[]
    LPLONG
    =System.Int32[]
    LPSTR
    =System.String
    LPTSTR
    =System.String
    LPVOID
    =System.UInt32
    LPWORD
    =System.Int32[]
    LPWSTR
    =System.String
    LRESULT
    =System.IntPtr
    PBOOL
    =System.Int16[]
    PBOOLEAN
    =System.Int16[]
    PBYTE
    =System.UInt16[]
    PCHAR
    =System.Char[]
    PCSTR
    =System.String
    PCTSTR
    =System.String
    PCWCH
    =System.UInt32
    PCWSTR
    =System.UInt32
    PDWORD
    =System.Int32[]
    PFLOAT
    =System.Float[]
    PHANDLE
    =System.UInt32
    PHKEY
    =System.UInt32
    PINT
    =System.Int32[]
    PLCID
    =System.UInt32
    PLONG
    =System.Int32[]
    PLUID
    =System.UInt32
    PSHORT
    =System.Int16[]
    PSTR
    =System.String
    PTBYTE
    =System.Char[]
    PTCHAR
    =System.Char[]
    PTSTR
    =System.String
    PUCHAR
    =System.Char[]
    PUINT
    =System.UInt32[]
    PULONG
    =System.UInt32[]
    PUSHORT
    =System.UInt16[]
    PVOID
    =System.UInt32
    PWCHAR
    =System.Char[]
    PWORD
    =System.Int16[]
    PWSTR
    =System.String
    REGSAM
    =System.UInt32
    SC_HANDLE
    =System.IntPtr
    SC_LOCK
    =System.IntPtr
    SHORT
    =System.Int16
    SIZE_T
    =System.UInt32
    SSIZE_
    =System.UInt32
    TBYTE
    =System.Char
    TCHAR
    =System.Char
    UCHAR
    =System.Byte
    UINT
    =System.UInt32
    UINT32
    =System.UInt32
    UINT64
    =System.UInt64
    ULONG
    =System.UInt32
    ULONG32
    =System.UInt32
    ULONG64
    =System.UInt64
    ULONGLONG
    =System.UInt64
    USHORT
    =System.UInt16
    WORD
    =System.UInt16
    WPARAM
    =System.IntPtr

    <---------補充----------->

    Wtypes.h 中的非托管類型    非托管C 語言類型    托管類名       說明 
    HANDLE                        
    void*                   System.IntPtr  32 位 
    BYTE                            unsigned 
    char       System.Byte    8 位 
    SHORT                         
    short                    System.Int16   16 位 
    WORD                          unsigned 
    short      System.UInt16  16 位 
    INT                               
    int                       System.Int32   32 位 
    UINT                             unsigned 
    int         System.UInt32  32 位 
    LONG                            
    long                    System.Int32   32 位 
    BOOL                            
    long                    System.Int32   32 位 
    DWORD                        unsigned 
    long       System.UInt32  32 位 
    ULONG                          unsigned 
    long      System.UInt32  32 位 
    CHAR                            
    char                    System.Char    用 ANSI 修飾。 
    LPSTR                           
    char*                  System.String 或 System.StringBuilder 用 ANSI 修飾。 
    LPCSTR                         Const 
    char*         System.String 或 System.StringBuilder 用 ANSI 修飾。 
    LPWSTR                        wchar_t
    *             System.String 或 System.StringBuilder 用 Unicode 修飾。 
    LPCWSTR                      Const wchar_t
    *    System.String 或 System.StringBuilder 用 Unicode 修飾。 
    FLOAT                           Float                    System.Single 
    32 位 
    DOUBLE                        Double                 System.Double 
    64 位 

     

     

    C
    /C++中的結構類型數據在C#下的轉換

     
    在做項目移植的時候,經常會碰到數據類型的轉換,而我這一次碰到的是C
    /C++中的結構怎樣轉換到C#。折騰了一個晚上終于有一個完美的方案。
    例如我們在C
    /C++下的結構數據如下:
    typedef 
    struct 
    {
        
    char sLibName[ 256 ];
        
    char sPathToLibrary[ 256 ];
        INT32        iEntries;
        INT32        iUsed;
        UINT16    iSort;
        UINT16    iVersion;
        BOOLEAN    fContainsSubDirectories;
        INT32        iReserved;
    }
     LIBHEADER;
    我們想把它轉成C#下的結構類型如下:
        
    public struct LIBHEADER
        
    {
            
    public char[] sLibName;
            
    public char[] sPathToLibrary;
            
    public Int32 iEntries;
            
    public Int32 iUsed;
            
    public UInt16 iSort;
            
    public UInt16 iVersion;
            
    public Boolean fContainsSubDirectories;
            
    public Int32 iReserved;
        }

    看上去好像沒問題了,呵呵呵,其實這樣是不行的,我們得再給C#編譯器一些信息,告訴它一些字符數組的大小。然后它們在C#下面長得樣子就變成這樣:
        [StructLayout(LayoutKind.Sequential)]
        
    public struct LIBHEADER
        
    {
            [MarshalAs(UnmanagedType.ByValArray, SizeConst 
    = 256)]
            
    public char[] sLibName;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst 
    = 256)]
            
    public char[] sPathToLibrary;
            
    public Int32 iEntries;
            
    public Int32 iUsed;
            
    public UInt16 iSort;
            
    public UInt16 iVersion;
            
    public Boolean fContainsSubDirectories;
            
    public Int32 iReserved;
        }

    然后寫一個函數負責轉換。
    public StructType ConverBytesToStructure<StructType>(byte[] bytesBuffer)
            
    {
                
    // 檢查長度。
                if (bytesBuffer.Length != Marshal.SizeOf(typeof(StructType)))
                
    {
                    
    throw new ArgumentException("bytesBuffer參數和structObject參數字節長度不一致。");
                }


                IntPtr bufferHandler 
    = Marshal.AllocHGlobal(bytesBuffer.Length);
                
    for (int index = 0; index < bytesBuffer.Length; index++)
                
    {
                    Marshal.WriteByte(bufferHandler, index, bytesBuffer[index]);
                }

                StructType structObject 
    = (StructType)Marshal.PtrToStructure(bufferHandler, typeof(StructType));
                Marshal.FreeHGlobal(bufferHandler);
                
    return structObject;
            }

    然后我們的函數用例是這樣:
        FileStream file 
    = File.OpenRead(@"D:\Jagged Alliance 2 Gold\INSTALL.LOG");
        
    byte[] buffer = new byte[Marshal.SizeOf(typeof(LIBHEADER))];
        file.Read(buffer, 
    0, buffer.Length);
        LIBHEADER testValue 
    = CommonTools.ConverBytesToStructure<LIBHEADER>(buffer);
    string libName = new string(testValue.sLibName);
    string pathToLibrary= new string(testValue.sPathToLibrary);
    OK,搞定。
    如果想去掉后面兩句的char數組的轉換哪代碼如下
    C#中的結構代碼
        [StructLayout(LayoutKind.Sequential, CharSet
    =CharSet.Ansi)]
        
    public struct LIBHEADER
        
    {
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst 
    = 256)]
            
    public string sLibName;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst 
    = 256)]
            
    public string sPathToLibrary;
            
    public Int32 iEntries;
            
    public Int32 iUsed;
            
    public UInt16 iSort;
            
    public UInt16 iVersion;
            
    public Boolean fContainsSubDirectories;
            
    public Int32 iReserved;
        }

    其它代碼不用作修改便可使用。

     
    posted on 2010-03-20 10:40 賀挺 閱讀(7216) 評論(0)  編輯  收藏 所屬分類: c#范例
    主站蜘蛛池模板: 国产成人无码区免费A∨视频网站 国产成人涩涩涩视频在线观看免费 | 亚洲欧洲日韩不卡| 午夜亚洲www湿好大| 亚洲不卡在线观看| 一级成人毛片免费观看| 久久久久久精品免费免费自慰| 国产美女无遮挡免费视频网站 | 亚洲男女性高爱潮网站| 亚洲av日韩aⅴ无码色老头| 在线看片免费人成视频播| 成人午夜18免费看| 久久久久无码精品亚洲日韩| 一级做a爰片久久毛片免费看| 免费一看一级毛片人| 亚洲欧洲高清有无| 亚洲视频在线观看免费视频| 亚洲XX00视频| 国产精品亚洲精品| 无码日韩精品一区二区三区免费| 国产又黄又爽又刺激的免费网址| 亚洲国产精品日韩av不卡在线| 日韩免费观看一区| 久久亚洲高清综合| 亚洲av无一区二区三区| 国产无遮挡裸体免费视频| 国产亚洲综合视频| 四虎成人精品一区二区免费网站| 久久亚洲精品国产精品| xxxx日本在线播放免费不卡| 亚洲一区AV无码少妇电影☆| 国产亚洲福利一区二区免费看| 高清在线亚洲精品国产二区| 亚洲中文字幕乱码一区| 99在线在线视频免费视频观看| 区三区激情福利综合中文字幕在线一区亚洲视频1| 亚洲国产亚洲片在线观看播放| 13小箩利洗澡无码视频网站免费| 亚洲第一成年男人的天堂| 成年网站免费视频A在线双飞| 久久亚洲AV无码精品色午夜麻豆| 日本视频免费高清一本18|