我有一个项目,当设置为 .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
};
...我不会提供所有代码,但其余结构看起来都非常相似。