.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 の値はサードパーティのライブラリによって提供されていますが、そのソースはありません。以下は、接続などの構造です。
[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
};
... すべてのコードを提供するつもりはありませんが、残りの構造体はすべて非常によく似ています。