7

在 C++ 中,您可以使用__declspec( align( # ) )声明符来控制用户定义数据的对齐方式。如何为 C# 做到这一点。我在我的 dll 中有两个用汇编程序编写的程序。过程的参数(两个数组)应该在 16 个字节上对齐。对于 C++,它工作正常。

我只是使用了声明

__declspec( align( 16 ) )
double a[2]={10.2,10.6};
4

1 回答 1

9

如果您正在寻找托管到非托管互操作(在基于 C#/.NET 和基于 C/C++/汇编器的软件之间传输数据),您将使用StructLayout属性和FieldOffset属性的组合:

[StructLayout(LayoutKind.Explicit, Pack = 16)]
public class MyDataClass {
    [FieldOffset(0)]
    double[] a;
}

根据 MSDN:

System.Runtime.InteropServices.StructLayoutAttribute.Pack 字段确定目标对象的数据字段的内存对齐方式。

http://support.microsoft.com/kb/922785

于 2012-04-24T20:39:20.217 回答