c#调用c++ dll的几种类型转换

来源:互联网 发布:windows系统监控 编辑:程序博客网 时间:2024/06/08 01:59

在合作开发时,C#时常需要调用C++DLL,当传递参数时时常遇到问题,尤其是传递和返回字符串是,现总结一下,分享给大家:
VC++中主要字符串类型为:LPSTR,LPCSTR, LPCTSTR, string, CString, LPCWSTR, LPWSTR等
但转为C#类型却不完全相同。
主要有如下几种转换:
将string转为IntPtr:IntPtr System.Runtime.InteropServices.Marshal.StringToCoTaskMemAuto(string)
将IntPtr转为string:string System.Runtime.InteropServices.MarshalPtrToStringAuto(IntPtr)

类型对照:
BSTR --------- StringBuilder
LPCTSTR --------- StringBuilder
LPCWSTR --------- IntPtr
handle---------IntPtr
hwnd-----------IntPtr
char *----------string
int * -----------ref int
int &-----------ref int
void *----------IntPtr
unsigned char *-----ref byte
Struct需要在C#里重新定义一个Struct
CallBack回调函数需要封装在一个委托里,delegate static extern int FunCallBack(string str);
注意在每个函数的前面加上public static extern +返回的数据类型,如果不加public ,函数默认为私有函数,调用就会出错。

API数据类型
类型描述
C#类型
WORD
16位无符号整数
ushort
LONG
32位无符号整数
int
DWORD
32位无符号整数
uint
HANDLE
句柄,32位整数
int
UINT
32位无符号整数
uint
BOOL
32位布尔型整数
bool
LPSTR
指向字符的32位指针
string
LPCSTR
指向常字符的32位指针
String
BYTE
字节
byte
CHAR
字符
char
DWORDLONG
64位长整数
long
HDC
设备描述表句柄
int
HGDIOBJ
GDI对象句柄
int
HINSTANCE
实例句柄
int
HWM
窗口句柄
int
HPARAM
32位消息参数
int
LPARAM
32位消息参数
int
WPARAM
32位消息参数
int

 

API
C#数据类型
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.Short
WPARAM
System.IntPtr