Falsch ausgerichtet oder überlappt von einem Nicht-Objektfeldfehler

8

Ich versuche die folgende Struktur zu erstellen:

%Vor%

und ich bekomme den folgenden Fehler:

Der Nachrichtentyp konnte nicht aus der Assembly geladen werden, weil er ein Objektfeld im Offset 4 enthält, das falsch ausgerichtet oder von einem Nicht-Objektfeld überlappt wurde.

Weiß jemand, warum dies einen Fehler verursacht?

Hinweis: Ich kann Pack nicht verwenden, da ich mit dem kompakten Framework arbeite. Danke.

    
SwDevMan81 27.07.2009, 19:20
quelle

2 Antworten

8

Der CF Marshaler ist nicht so gut in dieser Art von Sache und was Sie versuchen, wird nicht unterstützt. Das Problem ist, dass es weiß, dass das erste Element nicht ausgerichtet ist, aber es scheint nicht zu verstehen, dass jedes Element im Array auch nicht ausgerichtet wäre.

Sie können das Verhalten in diesem Beispiel sehen:

%Vor%

Bei dieser Art von Struktur lasse ich den Marshaller niemals versuchen, jedes Mitglied zu behandeln. Die Struktur ist klein, also brich jeden einzelnen Gegenstand so aus:

%Vor%

oder verwenden Sie eine simulierte "Union" wie folgt:

%Vor%     
ctacke 27.07.2009, 20:24
quelle
1

Das Problem tritt auf, weil Ihr Array "X" überlappt. ulong, in C #, ist UInt64 (in C ++ ist ulong UInt32), also sind es tatsächlich 8 Bytes.

Wenn Sie Ihr zweites FieldOffset auf 8 setzen oder X zu uint ändern, wird das verschwinden.

    
Reed Copsey 27.07.2009 19:24
quelle