0
當傳遞我的Devmode時調用ResetDC時出現System.AccessViolationException異常。我做了以下..調用ResetDC與devmode從編組結構複製到字節數組時崩潰
// create and marshall the devmode to a byte array.
DEVMODE myDevmode = new DEVMODE {dmSize = (short) Marshal.SizeOf(typeof (DEVMODE))};
myDevmode.dmFields = DM.Orientation;
myDevmode.dmOrientation = DMORIENT_LANDSCAPE;
IntPtr ptDM = Marshal.AllocHGlobal(myDevmode.dmSize);
Marshal.StructureToPtr(myDevmode, ptDM, false);
byte[] byteDM = new byte[myDevmode.dmSize];
Marshal.Copy(ptDM, byteDM, 0, myDevmode.dmSize);
然後我碰到一個COM接口調用(現有的架構無法更改)的方法:
SetDevMode(ref byteDM[0], myDevmode.dmSize)
在COM接口和背面的另一面.NET代碼的另一側下面的運行:
public void SetDevMode(ref byte pDevMode, int nDevModeSize)
{
_pageSetupDevMode = new byte[nDevModeSize];
unsafe
{
fixed (byte* p = &pDevMode)
{
Marshal.Copy((IntPtr)p, _pageSetupDevMode, 0, nDevModeSize);
}
}
}
並在稍後的點到ResetDC一個呼叫是由:
Win32.ResetDC(_hRefDc, ref _pageSetupDevMode[0]);
在這一點上我得到了異常。
發生類型'System.AccessViolationException'的未處理異常 附加信息:試圖讀取或寫入受保護的內存。這通常表明其他內存已損壞。
這occurrs gdi32.dll裏面
任何想法?
道歉,看起來像我的錯誤是在使用一個不兼容的devmode不是我的編組。 – Trev 2011-02-24 15:14:27