Marshal.PtrToStructure在.NET3.5中工作,但在.NET4中失败

时间:2012-09-20 10:46:26

标签: c# .net marshalling

我有一个项目,当设置为.NET3.5项目时,执行以下行,并按预期填充curConnection。

var curConnection = (Connection)Marshal.PtrToStructure(currentPtr, typeof(Connection));

当我将项目切换为.NET4项目时,curConnection对象不再填充正确的详细信息。将其切换回3.5使其再次工作,但我需要切换到.NET4,原因有多种,我不会进入。

我已经尝试将以下内容添加到配置中,但它没有帮助。

<configuration>
   <runtime>
      <NetFx40_PInvokeStackResilience enabled="1"/>
   </runtime>
</configuration>

有什么想法吗?

currentPtr值由第三方库提供,我没有它的来源。 以下是Connection等的结构。

[StructLayout(LayoutKind.Sequential)]
internal struct Connection
{
    public ConnectionId party;
    public ExtendedDevice staticDevice;
};
[StructLayout(LayoutKind.Sequential)]
internal struct ConnectionId // 70 bytes
{
    public UInt32 CallId; // 4 bytes
    public DeviceId DeviceId; // 64 bytes
    public DeviceTypes DeviceType; // 2 bytes
};

... 我不打算提供所有代码,但其余的结构看起来都非常相似。

0 个答案:

没有答案