是否保证此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