c# - 使用 c++ 中的 "long"进行互操作 c#

标签 c# c++ interop sizeof long-integer

在我的系统上: c++ 中的 sizeof(long) 是 4 又名 32 位 C# 中的 sizeof(long) 是 8 又名 64 位

所以在我的互操作方法声明中,我一直用 c# int 替换 c++ long,但我感觉这不安全?

为什么 C++ 中 long 与 int 大小相同?那么long long是64位吗?接下来长长长长是什么??

最佳答案

假设您有一个最新的 C 库,最好的办法是 include <stdint.h>并使用uint64_t , int64_t , uint32_t , int32_t 。无论底层平台的型号如何,这都将起作用。

但如果您好奇的话,根本问题是不同的系统使用不同的模型。在32位系统上,Posix和Windows都使用ILP32,这意味着整数、长整型和点都是32位长。

对于 64 位,Posix 和 Windows 使用不同的模型。

Posix 通常使用 LP64,这意味着 32 位整数、64 位长整型和 64 位指针。

Windows 使用 LLP64,这意味着 32 位整数和长整型、64 位长整型和 64 位指针。

关于c# - 使用 c++ 中的 "long"进行互操作 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2800642/

相关文章:

c# - F# 中是否有 C# 和 VB 兼容的 System.Void*? (关闭指向非托管 Alloc 的指针?)

c# - 如何使用 FromSqlRaw Entity Framework Core 3.1 从存储过程返回多个 SELECT 集

c# - 实例化并销毁 GameObject/ParticleSystem

c# - 如何使用 iTextSharp 创建 "link-looking"字体?

c# - Windows应用程序打开控制台并在其中写入

c++ - 通过引用传递 vector

c++ - 为什么我的 ifstream 中出现无限循环?

delegates - c++/cli 将(托管)委托(delegate)传递给非托管代码

c++ - 需要帮助追踪 MacOS 上函数入口的 EXC_BAD_ACCESS

java - 使用 Turnkey Linux 在 Windows 环境中托管 Java Web 服务?