首页 > 其他 > 详细

P/Invoke各种总结(四、平台调用时的数据类型对应)

时间:2020-05-15 18:59:20      阅读:38      评论:0      收藏:0      [点我收藏+]

C#和C++在互操作时,会涉及到数据类型对应的问题,如果数据类型用得不对,就会得不到想要的结果,严重的情况下,可能还会导致程序崩溃。这里做一下相关知识点的总结。

 

说明:

1. 表格第一列是Visual C++中的数据类型,第二列是标准C中的数据类型

2. 表格第三列括号中显示的是别名(关键字)。

3. 关于使用string还是StringBuilder,可以参考https://www.cnblogs.com/zhaotianff/p/12524947.html

VC++Ansi CC#(CTS)说明
VOID void System.Void(void) void类型,代表函数无返回值。在C++里函数无参数也可以传入void,在C#里不这么做。
HANDLE void * System.IntPtr or System.UIntPtr 长度:32位(32位系统), 64位(64位系统)
BYTE unsigned char System.Byte(byte) 长度:8位
SHORT short System.Int16(short) 长度:16位
WORD unsigned short System.UInt16(ushort) 长度:16 位
INT int System.Int32(int) 长度:32 位
UINT unsigned int System.UInt32(uint) 长度:32 位
LONG long System.Int32(int) 长度:32 位
BOOL long System.Boolean(bool) or System.Int32(int) 长度:32 位
DWORD unsigned long System.UInt32(uint) 长度:32 位
ULONG unsigned long System.UInt32(uint) 长度:32 位
CHAR char System.Char(char) 字符集:ANSI(多字节)
WCHAR wchar_t System.Char(char) 字符集:Unicode(宽字符)
LPSTR char * System.String(string) or System.Text.StringBuilder 字符集:ANSI(多字节)
LPCSTR const char * System.String(string) or System.Text.StringBuilder 字符集:ANSI(多字节)
LPWSTR wchar_t * System.String(string) or System.Text.StringBuilder 字符集:Unicode(宽字符)
LPCWSTR const wchar_t * System.String(string) or System.Text.StringBuilder 字符集:Unicode(宽字符)
FLOAT float System.Single(float) 长度:32 位
DOUBLE double System.Double(double) 长度:64 位

4. 如果启用了“允许不安全代码”,可以使用指针类型来代替System.IntPtr or System.UIntPtr

一般情况下,推荐使用System.IntPtr or System.UIntPtr类,但是如果需要指针偏移,就一定要用指针类型,而不是System.IntPtr or System.UIntPtr

示例代码:

P/Invoke各种总结(四、平台调用时的数据类型对应)

原文:https://www.cnblogs.com/zhaotianff/p/12896297.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!