编程语言
首页 > 编程语言> > 是否保证此C#结构具有所需的大小?

是否保证此C#结构具有所需的大小?

作者:互联网

我想通过包装IntPtr创建类型安全的指针结构:

struct Pointer<T>
{
    private IntPtr ptr;

    // methods marshalling from and to T
}

但是我也希望能够将Pointer< T>实例就像是IntPtrs一样,因此它们需要具有相同的大小和布局.可以保证吗?

如果没有,我是否要添加

[StructLayout(LayoutKind.Sequential, Pack = 1)]

在顶部?

基本上,到最后我应该可以整理此C结构

struct Foo {
    int *data;
};

使用此C#结构:

struct Foo
{
    public Pointer<int> data;
}

解决方法:

一切正常,无需帮助.

C#中的结构类型自动获取[StructLayout]属性.缺省值为打包为8的顺序封装.这与非托管代码中默认使用的打包类型相同.无论如何,只要结构中只有一个字段就没关系.

只要确保您没有添加任何字段并且不使用自动属性即可.您可以使用Marshal.SizeOf()进行仔细检查,在32位模式下应为4,在64位模式下应为8.换句话说,等于IntPtr.Size

标签:marshalling,c
来源: https://codeday.me/bug/20191122/2063680.html