我有一个 32 位 .NET 程序集,它 PInvoke 到 C 层。我想将此程序集移植到 64 位。我已经阅读了许多与移植到 64 位相关的文档,所有这些似乎都表明如果我们要使用结构,我们需要注意对齐。
我有一个与结构对齐有关的一般性问题,想先澄清一下,这样我就不会错过任何东西。
假设我有一个 C 入口点,它接受一个结构指针并基本上填满了里面的值。此 C 代码没有任何打包指令,并且所有 .NET 结构都与 pack=8 对齐。因此,如果我传递具有相邻整数的结构,我认为解释 .NET 层中填充的数据可能会出现问题,因为 C 默认情况下会使用 pack=4,而我们在 .NET 中将结构解释为 pack=8层,所以认为它可能会导致问题。但似乎并非如此。数据似乎解释得很好。
谁能解释这种行为?
谢谢,尼兰詹