2

我有一个项目,当设置为 .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
};

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

4

0 回答 0