|
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);
浙公网安备 33010602011771号