@ Ответ Ханса верен, но я просто добавлю несколько советов по отладке данных на маршале, чтобы вы могли видеть результаты.Я просто создаю экземпляр структуры и создаю указатель на нее следующим образом.
CardInfo cardInfo = new CardInfo();
IntPtr pointer = Marshal.AllocHGlobal(Marshal.SizeOf(cardInfo));
Marshal.StructureToPtr(cardInfo, pointer, false);
Вставьте точку останова в последнюю строку этого и войдите в отладчик, пока он не сломается.Вы должны увидеть pointer
в окнах locals / autos, и его значением должно быть некоторое значение типа int.(Здесь лучше всего работает шестнадцатеричный дисплей).
Перейдите в окно команд и введите dc 0x0086bf30
<- адрес вашего указателя.Он должен выгружать данные из памяти.Повторный ввод <code>dc сбросит следующие фрагменты памяти.Вы также можете использовать da
, db
, dd
, df
, dq
для вывода данных в виде различных типов.Попробуйте перешагнуть через точку останова далее (F10) и снова сбросить ту же память.
Вы можете инициализировать поля вашей структуры с определенными значениями и наблюдать изменения здесь, чтобы увидетьесли работает как надо.