sundajade

博客园 首页 联系 订阅 管理

C++

C#

WORD         

System.ushort

DWORD        

System.uint

UCHAR        

int/byte (大部分情况都可以使用int代替,而如果需要严格对齐的话则应该用bytebyte)

UCHAR*       

System.string/System.IntPtr

unsigned char*

[MarshalAs(UnmanagedType.LPArray)]System.byte[]/?(System.Intptr)

ref System.byte

char*        

System.string

LPCTSTR      

System.string

LPTSTR       

[MarshalAs(UnmanagedType.LPTStr)] System.string

long         

System.int

ulong        

System.uint

Handle       

System.IntPtr

HWND         

System.IntPtr

void*        

System.IntPtr

int          

System.int

int*         

ref System.int

*int         

System.IntPtr

int &

ref System.int

unsigned int 

System.uint

COLORREF     

System.uint

BOOL       

System.Int32

BOOLEAN    

System.Int32

BSTR

StringBuilder

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 (System.StringBuilder)

LPCVOID    

System.UInt32

LPCWSTR    

System.String  (System.IntPtr)

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 位

 

Struct需要在C#里重新定义一个Struct

CallBack回调函数需要封装在一个委托里,delegate static extern int FunCallBack(string str);

注意在每个函数的前面加上public static extern +返回的数据类型,如果不加public ,函数默认为私有函数,调用就会出错

    string str = "sundajade";

    //string转为IntPtr 

  IntPtr ptr = System.Runtime.InteropServices.Marshal.StringToCoTaskMemAuto(str);

   //IntPtr转为string

  string str2 = System.Runtime.InteropServices.Marshal.PtrToStringAuto(ptr);

posted on 2014-05-18 21:31  sundajade  阅读(114)  评论(0)    收藏  举报