• 您的(de)位置:首頁 > 新聞動態 > 技術文章

    C#與C++數據類型對應總結

    2019/5/9      點(diǎn)擊:

    C#與C++數據類型對應總結


    Windows Data Type

    .NET Data Type

    BOOL, BOOLEAN

    Boolean or Int32

    BSTR

    String

    BYTE

    Byte

    CHAR

    Char

    DOUBLE

    Double

    DWORD

    Int32 or UInt32

    FLOAT

    Single

    HANDLE (and all other handle types, such as HFONT and HMENU)

    IntPtr, UintPtr or HandleRef

    HRESULT

    Int32 or UInt32

    INT

    Int32

    LANGID

    Int16 or UInt16

    LCID

    Int32 or UInt32

    LONG

    Int32

    LPARAM

    IntPtr, UintPtr or Object

    LPCSTR

    String

    LPCTSTR

    String

    LPCWSTR

    String

    LPSTR

    String or StringBuilder*

    LPTSTR

    String or StringBuilder

    LPWSTR

    String or StringBuilder

    LPVOID

    IntPtr, UintPtr or Object

    LRESULT

    IntPtr

    SAFEARRAY

    .NET array type

    SHORT

    Int16

    TCHAR

    Char

    UCHAR

    SByte

    UINT

    Int32 or UInt32

    ULONG

    Int32 or UInt32

    VARIANT

    Object

    VARIANT_BOOL

    Boolean

    WCHAR

    Char

    WORD

    Int16 or UInt16

    WPARAM

    IntPtr, UintPtr or Object

    另(lìng): 在進行string轉換時,需要加入前(qián)綴[MarshalAs(UnmanagedType.LPStr)]lpdword 對應於 ref int


    C/C++

    C#

    HANDLE, LPDWORD, LPVOID, void*

    IntPtr

    LPCTSTR, LPCTSTR, LPSTR, char*, const char*, Wchar_t*, LPWSTR

    String [in], StringBuilder [in, out]

    DWORD, unsigned long, Ulong

    UInt32, [MarshalAs(UnmanagedType.U4)]

    bool

    bool

    LP

    [In] ref

    SIZE_T

    uint

    LPDWORD

    out uint

    LPTSTR

    [Out] StringBuilder

    PULARGE_INTEGER

    out ulong

    WORD

    uInt16

    Byte, unsigned char

    byte

    Short

    Int16

    Long, int

    Int32

    float

    single

    double

    double

    NULL pointer

    IntPtr.Zero

    Uint

    Uint32

    C#調用DLL文件時參數對應表

    Wtypes.h 中的(de)非托管類(lèi)型

    非托管 C 語言類型

    托(tuō)管(guǎn)類名

    說明

    HANDLE

    void*

    System.IntPtr

    在 32 位 Windows 操作係統上為 32 位,在 64 位 Windows 操作係統上為 64 位。

    BYTE

    unsigned char

    System.Byte

    8 位

    SHORT

    short

    System.Int16

    16 位(wèi)

    WORD

    unsigned short

    System.UInt16

    16 位(wèi)

    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 或(huò)   System.Text.StringBuilder

    用 ANSI 修(xiū)飾(shì)。

    LPCSTR

    Const char*

    System.String 或   System.Text.StringBuilder

    用 ANSI 修飾。

    LPWSTR

    wchar_t*

    System.String 或   System.Text.StringBuilder

    用 Unicode 修飾。

    LPCWSTR

    Const wchar_t*

    System.String 或   System.Text.StringBuilder

    用 Unicode 修飾。

    FLOAT

    Float

    System.Single

    32 位

    DOUBLE

    Double

    System.Double

    64 位

      //C++中的DLL函數原型為
      //extern "C" __declspec(dllexport) bool 方法名一(const char* 變量名1, unsigned char* 變量名(míng)2)
      //extern "C" __declspec(dllexport) bool 方法名二(èr)(const unsigned char* 變(biàn)量名1, char* 變量名2)

      //C#調用C++的DLL搜集整理的所有數據類(lèi)型轉(zhuǎn)換方式,可能會有重複或者多種方案,自己多(duō)測試
      //c++:HANDLE(void *) ---- c#:System.IntPtr  
      //c++:Byte(unsigned char) ---- c#:System.Byte  
      //c++:SHORT(short) ---- c#:System.Int16  
      //c++:WORD(unsigned short) ---- c#:System.UInt16  
      //c++:INT(int) ---- c#:System.Int16
      //c++:INT(int) ---- c#:System.Int32  
      //c++:UINT(unsigned int) ---- c#:System.UInt16
      //c++:UINT(unsigned int) ---- c#:System.UInt32
      //c++:LONG(long) ---- c#:System.Int32  
      //c++:ULONG(unsigned long) ---- c#:System.UInt32  
      //c++:DWORD(unsigned long) ---- c#:System.UInt32  
      //c++:DECIMAL ---- c#:System.Decimal  
      //c++:BOOL(long) ---- c#:System.Boolean  
      //c++:CHAR(char) ---- c#:System.Char  
      //c++:LPSTR(char *) ---- c#:System.String  
      //c++:LPWSTR(wchar_t *) ---- c#:System.String  
      //c++:LPCSTR(const char *) ---- c#:System.String  
      //c++:LPCWSTR(const wchar_t *) ---- c#:System.String  
      //c++:PCAHR(char *) ---- c#:System.String  
      //c++:BSTR ---- c#:System.String  
      //c++:FLOAT(float) ---- c#:System.Single  
      //c++:DOUBLE(double) ---- c#:System.Double  
      //c++:VARIANT ---- c#:System.Object  
      //c++:PBYTE(byte *) ---- c#:System.Byte[] 

      //c++:BSTR ---- c#:StringBuilder
      //c++:LPCTSTR ---- c#:StringBuilder
      //c++:LPCTSTR ---- c#:string
      //c++:LPTSTR ---- c#:[MarshalAs(UnmanagedType.LPTStr)] string  
      //c++:LPTSTR 輸出變量名 ---- c#:StringBuilder 輸出變量名
      //c++:LPCWSTR ---- c#:IntPtr
      //c++:BOOL ---- c#:bool   
      //c++:HMODULE ---- c#:IntPtr   
      //c++:HINSTANCE ---- c#:IntPtr  
      //c++:結構體 ---- c#:public struct 結構(gòu)體{};  
      //c++:結構體 **變量(liàng)名 ---- c#:out 變量名 //C#中提前申明(míng)一個結構體實例化後的變量名
      //c++:結構體 &變量名 ---- c#:ref 結構體 變量名

      //c++:WORD ---- c#:ushort
      //c++:DWORD ---- c#:uint
      //c++:DWORD ---- c#:int

      //c++:UCHAR ---- c#:int
      //c++:UCHAR ---- c#:byte
      //c++:UCHAR* ---- c#:string
      //c++:UCHAR* ---- c#:IntPtr

      //c++:GUID ---- c#:Guid
      //c++:Handle ---- c#:IntPtr
      //c++:HWND ---- c#:IntPtr
      //c++:DWORD ---- c#:int
      //c++:COLORREF ---- c#:uint

      //c++:unsigned char ---- c#:byte
      //c++:unsigned char * ---- c#:ref byte
      //c++:unsigned char * ---- c#:[MarshalAs(UnmanagedType.LPArray)] byte[]
      //c++:unsigned char * ---- c#:[MarshalAs(UnmanagedType.LPArray)] Intptr

      //c++:unsigned char & ---- c#:ref byte
      //c++:unsigned char 變量名(míng) ---- c#:byte 變量(liàng)名
      //c++:unsigned short 變量(liàng)名 ---- c#:ushort 變(biàn)量名
      //c++:unsigned int 變量名 ---- c#:uint 變量名
      //c++:unsigned long 變量名 ---- c#:ulong 變量名

      //c++:char 變量名 ---- c#:byte 變量(liàng)名 //C++中(zhōng)一個字符用一個字節表示,C#中一個字符用兩個字節表示
      //c++:char 數組名[數組大(dà)小] ---- c#:MarshalAs(UnmanagedType.ByValTStr, SizeConst = 數組大小)] public string 數組(zǔ)名; ushort

      //c++:char * ---- c#:string //傳(chuán)入參數
      //c++:char * ---- c#:StringBuilder//傳出參數
      //c++:char *變量名 ---- c#:ref string 變量(liàng)名
      //c++:char *輸入變量名 ---- c#:string 輸入(rù)變量名
      //c++:char *輸出變量名 ---- c#:[MarshalAs(UnmanagedType.LPStr)] StringBuilder 輸出變量名

      //c++:char ** ---- c#:string
      //c++:char **變量名 ---- c#:ref string 變量名
      //c++:const char * ---- c#:string
      //c++:char[] ---- c#:string
      //c++:char 變(biàn)量名[數組大小] ---- c#:[MarshalAs(UnmanagedType.ByValTStr,SizeConst=數組(zǔ)大小)] public string 變量名; 

      //c++:struct 結構體名 *變量名 ---- c#:ref 結構體名 變量名
      //c++:委托 變量名(míng) ---- c#:委托 變量名

      //c++:int ---- c#:int
      //c++:int ---- c#:ref int
      //c++:int & ---- c#:ref int
      //c++:int * ---- c#:ref int //C#中調用前需定義int 變(biàn)量名 = 0;

      //c++:*int ---- c#:IntPtr
      //c++:int32 PIPTR * ---- c#:int32[]
      //c++:float PIPTR * ---- c#:float[]

      //c++:double** 數組名 ---- c#:ref double 數組名
      //c++:double*[] 數組名 ---- c#:ref double 數組名
      //c++:long ---- c#:int
      //c++:ulong ---- c#:int    
      //c++:UINT8 * ---- c#:ref byte //C#中(zhōng)調用前需定(dìng)義byte 變量名 = new byte();  

      //c++:handle ---- c#:IntPtr
      //c++:hwnd ---- c#:IntPtr
       //c++:void * ---- c#:IntPtr   
      //c++:void * user_obj_param ---- c#:IntPtr user_obj_param
      //c++:void * 對象名稱 ---- c#:([MarshalAs(UnmanagedType.AsAny)]Object 對象名稱(chēng)

      //c++:char, INT8, SBYTE, CHAR ---- c#:System.SByte   
      //c++:short, short int, INT16, SHORT ---- c#:System.Int16   
      //c++:int, long, long int, INT32, LONG32, BOOL , INT ---- c#:System.Int32   
      //c++:__int64, INT64, LONGLONG ---- c#:System.Int64   
      //c++:unsigned char, UINT8, UCHAR , BYTE ---- c#:System.Byte   
      //c++:unsigned short, UINT16, USHORT, WORD, ATOM, WCHAR , __wchar_t ---- c#:System.UInt16   
      //c++:unsigned, unsigned int, UINT32, ULONG32, DWORD32, ULONG, DWORD, UINT ---- c#:System.UInt32   
      //c++:unsigned __int64, UINT64, DWORDLONG, ULONGLONG ---- c#:System.UInt64   
      //c++:float, FLOAT ---- c#:System.Single   
      //c++:double, long double, DOUBLE ---- c#:System.Double  

      //Win32 Types ---- CLR Type   

      //Struct需要(yào)在C#裏重新定義一個Struct
      //CallBack回調函數需要封裝在一個委托裏,delegate static extern int FunCallBack(string str);

      //unsigned char** ppImage替換成IntPtr ppImage
      //int& nWidth替換(huàn)成ref int nWidth
      //int*, int&, 則都可(kě)用(yòng) ref int 對應
      //雙針指(zhǐ)類型參數,可以用 ref IntPtr
      //函數指(zhǐ)針使用c++: typedef double (*fun_type1)(double); 對應 c#:public delegate double fun_type1(double);
      //char* 的操作c++: char*; 對應 c#:StringBuilder;
      //c#中使用指針:在需要使用指(zhǐ)針(zhēn)的地方 加 unsafe

      //unsigned char對應public byte
      /*
      * typedef void (*CALLBACKFUN1W)(wchar_t*, void* pArg);
      * typedef void (*CALLBACKFUN1A)(char*, void* pArg);
      * bool BIOPRINT_SENSOR_API dllFun1(CALLBACKFUN1 pCallbackFun1, void* pArg);
      * 調用方式為
      * [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
      * public delegate void CallbackFunc1([MarshalAs(UnmanagedType.LPWStr)] StringBuilder strName, IntPtr pArg);
      *  
      */

    密桃直播-密桃直播手机版下载-蜜桃直播app下载安装-蜜桃直播官方版下载