2012-04-02 4 views
1

In meinem Code ich einen UInt64-Wert bin zu berechnen, dann es wie folgt aus Gießen:Reinterpreting UInt64 als Struktur

return *(Cell*)packedUInt64; 

Zelle eine Struktur ist. Marshal.SizeOf (new Cell()) gibt 8 aus, also sollte es mit einem UInt64 übereinstimmen, aber die obige Darstellung stürzt mit AccessViolationException ab. Ich könnte wahrscheinlich sicherere Methoden wie Marshal.StructureToPtr ausprobieren, aber ich frage mich immer noch, wo der Fehler in meinem Code ist? Vielleicht ein Problem mit der Anpassung der Ausrichtung?

+0

Ein Grund, warum ich vor Marshal zurückschrecke. StructureToPtr ist, dass es ein bisschen langsam ist. –

+0

'StructureToPtr' ist genau das, was Sie brauchen, wenn Sie fragen, wie Sie es vermeiden können. –

Antwort

2

Wenn ich Sie richtig verstehe, berechnen Sie einen UInt64-Wert (wie?) Und dann werfen Sie das auf einen POINTER. Sie konvertieren es nicht in eine Cell-Struktur, sondern in einen Speicherort, in dem sich diese Zelle befindet. Die AccessViolationException scheint in diesem Fall vollkommen verständlich zu sein.

Ist es das, was Sie tatsächlich versuchen, oder habe ich Ihren Code missverstanden?