2012-04-02 1 views
1

В моем коде я вычисление значения uint64, то литье это так:переосмысление UInt64 как структура

return *(Cell*)packedUInt64; 

Cell является структурой. Marshal.SizeOf (new Cell()) печатает 8, поэтому он должен совпадать с UInt64, но вышеприведенный сброс с AccessViolationException. Возможно, я мог бы попробовать более безопасные методы, такие как Marshal.StructureToPtr, но мне все еще интересно, где ошибка в моем коде? Может быть проблема несоответствия выравнивания?

+0

Одна из причин, по которым я уклоняюсь от Marshal.StructureToPtr - это то, что он немного медленный. –

+0

'StructureToPtr' - это именно то, что вам нужно использовать, учитывая, что вы даже спрашиваете, как избежать его использования. –

ответ

2

Если я правильно вас понимаю, вы вычисляете значение UInt64 (как?), А затем отправляете это в POINTER. Вы фактически не конвертируете его в структуру ячеек, а в ячейку памяти, в которой находится эта ячейка. В этом случае AccessViolationException кажется совершенно понятным.

Это то, что вы на самом деле пытаетесь сделать, или я неправильно понял ваш код?