使用c ++中的"long"来互操作c#

Dan*_*iel 2 c# c++ interop sizeof long-integer

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

所以在我的Interop方法声明中,我一直用c#int代替c ++ longs但是我觉得这不安全吗?

为什么长度与c ++中的int相同?长期是64位?什么是下一个很长很长的??

R S*_*hko 7

最好的办法假设你有一个最近的C库是include <stdint.h>和使用uint64_t,int64_t,uint32_t,int32_t.无论底层平台的型号如何,这都将有效.

但如果你很好奇,潜在的问题是不同的系统使用不同的模型.在32位系统上,Posix和Windows都使用ILP32,这意味着整数,long和point都是32位长.

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

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

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