日韩在线国产精品_少妇性饥渴BBBBB搡BBBB_3344在线永久观看视频播放_亚洲精品一区二区三区新线路_亚洲精品一级片_182午夜免费

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

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

    2019/5/9??????點擊:

    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

    另: 在進行string轉換時,需要加入前綴[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 中的非托管類型

    非托管 C 語言類型

    托管類名

    說明

    HANDLE

    void*

    System.IntPtr

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

    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.Text.StringBuilder

    用 ANSI 修飾。

    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* 變量名2)
      //extern "C" __declspec(dllexport) bool 方法名二(const unsigned char* 變量名1, char* 變量名2)

      //C#調用C++的DLL搜集整理的所有數據類型轉換方式,可能會有重復或者多種方案,自己多測試
      //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 結構體{};  
      //c++:結構體 **變量名 ---- c#:out 變量名 //C#中提前申明一個結構體實例化后的變量名
      //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 變量名 ---- c#:byte 變量名
      //c++:unsigned short 變量名 ---- c#:ushort 變量名
      //c++:unsigned int 變量名 ---- c#:uint 變量名
      //c++:unsigned long 變量名 ---- c#:ulong 變量名

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

      //c++:char * ---- c#:string //傳入參數
      //c++:char * ---- c#:StringBuilder//傳出參數
      //c++:char *變量名 ---- c#:ref string 變量名
      //c++:char *輸入變量名 ---- c#:string 輸入變量名
      //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 變量名[數組大小] ---- c#:[MarshalAs(UnmanagedType.ByValTStr,SizeConst=數組大小)] public string 變量名; 

      //c++:struct 結構體名 *變量名 ---- c#:ref 結構體名 變量名
      //c++:委托 變量名 ---- c#:委托 變量名

      //c++:int ---- c#:int
      //c++:int ---- c#:ref int
      //c++:int & ---- c#:ref int
      //c++:int * ---- c#:ref int //C#中調用前需定義int 變量名 = 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#中調用前需定義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 對象名稱

      //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需要在C#里重新定義一個Struct
      //CallBack回調函數需要封裝在一個委托里,delegate static extern int FunCallBack(string str);

      //unsigned char** ppImage替換成IntPtr ppImage
      //int& nWidth替換成ref int nWidth
      //int*, int&, 則都可用 ref int 對應
      //雙針指類型參數,可以用 ref IntPtr
      //函數指針使用c++: typedef double (*fun_type1)(double); 對應 c#:public delegate double fun_type1(double);
      //char* 的操作c++: char*; 對應 c#:StringBuilder;
      //c#中使用指針:在需要使用指針的地方 加 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);
      *  
      */

    主站蜘蛛池模板: 亚洲精品成人cosplay | 久久久蜜桃一区二区人 | 欧美久久久久久久久久久 | 久久精品资源 | 伊人久久无码大香线蕉综合6 | 一区二区三高清 | 啄木乌欧美一区二区三区在线 | 亚洲三及 | eeuss影院www免费播放 | 精品国产一区二区三区四区四 | 国产精品久久久久影院嫩草 | 国产一级一级毛片 | 一级性a | 91亚洲精品乱码久久久久久蜜桃 | av免费观| 欧美日韩综合一区二区在线观看视频 | 在线精品在线 | 亚洲国产一区二区在线 | 成人精品在线观看视频 | 美女等你来调教国产免费观看调教网 | 国产精品毛多多水多 | 日韩aⅴ人妻无码一区二区 国产亚洲精品久久久网站好莱 | 999视频在线观看 | 精品在线观看一区二区 | 成人av网址天堂 | 大香伊蕉国产播放 | 久草黄色| wwww亚洲| 久久青视频| 国产一级淫片久久久片a级 国产精品一区二区在线播放 | 精品91一区二区三区 | 狼亚洲AV无码专区在线播放中文 | 91人人草| 国产精品色区在线观看 | 国产欧美日韩高清在线不卡 | 国产精品一区二区免费 | 国产真实迷奷系列 | 中文字幕一区二区三区日韩精品 | 日韩精品a在线观看 | 小明 看看免费平台永久 | 日日摸夜夜添欧美一区 |