C++ / C# PInvoke - 封送显式大小的数字
C++ / C# PInvoke - Marshalling explicitly sized numerics
Int32
) 中的int
封送到本机 (C++) 库/从本机 () 库封送,在C++代码中声明相关变量的最佳方法是什么?
我可以使用标准int
但我宁愿明确该变量的宽度(我知道它在大多数平台上都是 32 位的)。
到目前为止,我可以看到两个选项:
int32_t
在__int32
(MSVC++ 标识符) ...但是,如果可以的话,我想保持平台独立
我似乎记得听说 C++11 为此有一些新库,但我似乎找不到任何提及它的地方。
谢谢。
当前发布的 C# 和 C++ 编译器中的int关键字分别是 System.Int32 和 __int32 的类型别名,这些类型是其后端使用的具体类型。 我已经写了 30 年的代码,使用过 8 位、16 位、32 位和 64 位处理器。 30年前和我今天一样使用。并且花费很少的精力将程序移植到下一代架构或操作系统版本。
你也可以在winapi中看到这一点。 用于函数参数或返回值的每个类型都是一个类型别名。 Windows 1.0 版中的 CreateWindow() 函数看起来与您在 64位版本的 Windows 8.1 中使用的函数完全相同
。我不幻想这种进展今天突然停止了。 128位处理器已经是IBM的必备品。 语言使用类型别名来防止自己迅速过时和被遗忘。 对于 C 和 C++ 等语言如此,对于 C# 也是如此。 尽管在 C# 的情况下肯定需要移动更大的石头,但这个身份现在刻在大多数 C# 程序员的脑海中。
有意不使用类型别名会使程序的可移植性降低。
您可以使用正好是 32 位的int32_t。可能存在未定义int32_t的C++实现,但在这种情况下,所有赌注都已关闭。
在我所知道的每个支持 C# 的平台上,C/C++ int 是 32 位,所以你可能想多了。
要考虑的另一件事是您的C++代码接受的类型。如果它接受 int,并且您使用的平台 int 不是 32 位,那么您仍然有问题。
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 将数字打印成文字
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- C++ / C# PInvoke - 封送显式大小的数字