Ich ging heute durch meine Win32-Klasse, um an einigen dringend benötigten Verbesserungen zu arbeiten. Ich stecke auf meinem Festplatten-Geometrie-Code fest. Auf derProblem mit der Marshalklasse
var ob = (DiskGeometry) Marshal.PtrToStructure (geomp, typeof (DiskGeometry));
Linie, hält es eine Ausnahme zu werfen ..
Versuchte geschützten Speicher zu lesen oder zu schreiben. Dies ist oft ein Hinweis darauf, dass anderer Speicher beschädigt ist.
Mein Code ist ..
if (Handle.IsInvalid)
{
Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
return new DiskGeometry();
}
var geom = new DiskGeometry();
var geomp = Marshal.AllocHGlobal(Marshal.SizeOf(geom));
Marshal.StructureToPtr(geom, geomp, false);
uint returnedBytes;
if (!DeviceIoControl(Handle, (uint) IOCTL_CONTROL_CODE_CONSTANTS.IOCTL_DISK_GET_DRIVE_GEOMETRY, IntPtr.Zero, 0, ref geomp, (uint)Marshal.SizeOf(typeof(DiskGeometry)), out returnedBytes, IntPtr.Zero))
{
Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
return new DiskGeometry();
}
var ob = (DiskGeometry)Marshal.PtrToStructure(geomp, typeof (DiskGeometry));
Was mache ich falsch?
Können Sie uns zeigen, die Definition für 'DiskGeometry'? – JaredPar
http://pastie.org/1324196 – Eaton
Haben Sie noch etwas geändert? Hat sich die 'DiskGeometry' Struktur geändert? Was ist mit dem Code über dem, was Sie uns zeigen? Ich bin gespannt, woher 'Handle' kommt. –