2009-07-28 32 views

答えて

6

この特定のMarshal.PtrToStructureを値タイプ(つまり、struct)と呼ぶことはできません。

this overloadに電話すると、タイプバックのインスタンスを受け取ることができます。

+0

例: 'dbh =(Device_Broadcast_Header)Marshal.PtrToStructure(m.LParam、typeof(Device_Broadcast_Header));' – Pieniadz

2

申し訳

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

ありがとう:dbhは型であることを考えると

Marshal.PtrToStructure(m.LParam, dbh); 

: それは私のプログラムでは、次のコード行によって原因であることですあなたを助けるかもしれないlinkです。ここで

は、上記のリンクからキーテキストです:

問題が RegisterTraceGuids APIで何もしません。

は Marshal.PtrToStructure(のIntPtr、Object)を http://msdn.microsoft.com/en-us/library/30ex8z62.aspx のドキュメントによれば、シーケンシャルまたは明示的または構造 ボックス化値型である構造のレイアウトがない ときにあなたが見た ArgumentExceptionがスローされます。

この場合、構造はシーケンシャルとして 宣言され、但し、配列 に 要素(traceGuidReg [I])をこのように使用すると、エラーが発生しました、なぜならアレイ オブジェクトの 管理ヒープに箱詰めされています" 構造体は値クラスであってはなりません。"

あなたが過負荷 Marshal.PtrToStructure法(のIntPtr、 タイプ) http://msdn.microsoft.com/en-us/library/4ca6d5z7.aspxを使用して配列要素に PtrToStructureの結果を割り当てる必要がある

+0

ありがとうJas私は、あなたが答えたとそのサイトも解決しましたが、あなたはthet guyがManaged Heapに入れられている要素の意味を説明できますか?私はこれがどういう意味かはっきりしていると思いますが、明確にしたいと思います。 –

0
[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); 
+0

コードのみの回答は将来の読者のために多くの情報を提供しないので推奨されません。 – WhatsThePoint

関連する問題