Frage

Kann jemand bitte erklären, die folgende Argument Ausnahme: Die Struktur muss keinen Wert Klasse , um mich zu gefallen. Es ist Ursache durch die folgende Codezeile in meinem Programm:

Marshal.PtrToStructure(m.LParam, dbh);

da dbh ist vom Typ:

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

Danke

War es hilfreich?

Lösung

Sie können diese insbesondere nicht nennen Marshal.PtrToStructure Überlastung mit einem Wert-Typ ( dh eine struct).

Wenn Sie rufen Sie diese Überlastung Sie eine Instanz empfangen kann Ihrer geben Sie zurück.

Andere Tipps

Es tut uns keinen Code Beispiel zu geben, aber hier ist ein link Das könnte helfen Sie.

Hier ist der Schlüsseltext aus dem obigen Link:

  

Das Problem hat nichts mit der   RegisterTraceGuids API.

     

Nach dem doc   Marshal.PtrToStructure (IntPtr, Object)    http://msdn.microsoft.com/en-us/library/30ex8z62. aspx   , Wirft es das Argument dass   Sie sah, als Struktur-Layout nicht ist   sequentielle oder explizite oder Struktur ist   eine geschachtelte Wert ein.

     

In diesem Fall ist die Struktur   erklärt als sequenzielle jedoch die   Elemente in dem Array   (TraceGuidReg [i]) auf die eingerahmte   wegen des Arrays verwalteten Heap   Objekt, so bekam man den Fehler „der   Struktur darf kein Wert Klasse sein. "

     

Sie müßten die Überlastung verwenden   Marshal.PtrToStructure Methode (IntPtr,   Art)    http://msdn.microsoft.com/en-us/library/4ca6d5z7. aspx   und weist das Ergebnis der   PtrToStructure auf die Array-Elemente.

[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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top