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<struct> |
[in] ref <struct> |
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 位
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 位
习惯用c#写东西,但平时又会碰到很多要用win32 api的地方,所以经常要用dllimport,但win32函数的类型写法是很庞杂的,相信为之困扰的不止我一个,现在我整理一份我个人的理解如下,希望高人不吝赐教。
我的基本原则有如下几点:
1、下面都是针对32位系统的,所以int是32位.long也是32位;
2、各种句柄类的(h开头),我认为一律是system.intptr,到目前为止没发现出错;如果哪位在使用中出错,请指出;
3、lp和p,我实在不懂(对c 不太了解),对于lp和p开头的函数,如果是和str有关的,一律写为system.string,像plcid这样指向什么东西的,写为system.uint32(因为指向另一个地址,那就是指针,指针是32位吧),int之类的数值型,那我就写为int[],以方便.net程序引用(写成system.uint32的话,给api调用应该也不会出错,但.net程序就不好引用了)
如有意见,欢迎指教。谢谢
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.
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 位 |
以上就是本次介绍的全部知识点内容,感谢大家对的支持。