質問

誰かが次の引数の例外を説明してください: 構造体は値クラスであってはなりません 私にお願いします。私のプログラム内の次のコード行が原因です。

Marshal.PtrToStructure(m.LParam, dbh);

とすれば dbh タイプは次のとおりです:

[StructLayout(LayoutKind.Sequential)]
public struct Device_Broadcast_Header
{
    public int dbch_size;
    public int dbch_devicetype;
    public int dbch_reserved;
}

ありがとう

役に立ちましたか?

解決

これを特別と呼ぶことはできません Marshal.PtrToStructure 値型を使用したオーバーロード (つまり、ある struct).

電話したら この過負荷 あなたのタイプのインスタンスを受け取ることができます。

他のヒント

コード例を示さなくて申し訳ありませんが、これは次のとおりです リンク それはあなたを助けるかもしれません。

上記のリンクからの重要なテキストは次のとおりです。

この問題は、RegisterTraceGuids APIで何もしません。

Marshal.PtrtTOSTRUCTURE(INTPTR、オブジェクト)のドキュメントによると http://msdn.microsoft.com/en-us/library/30ex8z62.aspx、構造レイアウトが順次または明示的でない場合、または構造が箱入り値のタイプである場合に見たArgumentExceptionをスローします。

この場合、構造はシーケンシャルとして宣言されますが、配列の要素(traceGuidreg [i])は、配列オブジェクトのためにマネージドヒープにボックス化されているため、エラーが得られます。 。」

オーバーロードMarshal.PtrToStructureメソッド(INTPTR、タイプ)を使用する必要があります http://msdn.microsoft.com/en-us/library/4ca6d5z7.aspxptrtToStructureの結果を配列要素に割り当てます。

[StructLayout(LayoutKind.Sequential)]
public class Device_Broadcast_Header_Wrapper{
    public Device_Broadcast_Header Header
}

Device_Broadcast_Header_Wrapper wapper = new Device_Broadcast_Header_Wrapper();
Marshal.PtrToStructure(m.LParam, wapper);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top