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