2010-08-25 134 views
0

權函數聲明是:訪問衝突上編組

[的DllImport( 「USER32.DLL」)] 靜態外部INT內SetScrollInfo(IntPtr的HWND,整數N,REF SCROLLINFO lpcScrollInfo,布爾B);

我聲明它喜歡:

[的DllImport( 「USER32.DLL」,字符集= CharSet.Auto,ExactSpelling =真)] 靜態外部INT內SetScrollInfo(IntPtr的HWND,整數N,SCROLLINFO lpcScrollInfo,布爾b );

它可能是訪問衝突異常的原因嗎?

我有異常: 在UI線程中發生未處理的異常System.AccessViolationException:試圖讀取或寫入受保護的內存。這通常表明其他內存已損壞。 在System.Drawing.SafeNativeMethods.PrintDlg(PRINTDLGX86 LPPD) 在System.Drawing.Printing.PrinterSettings.GetDefaultPrinterName() 在System.Drawing.Printing.PrinterSettings.get_PrinterNameInternal() 在System.Drawing.Printing.PrinterSettings.get_PrinterName ()

回答

0

您沒有發佈SCROLLINFO結構定義。在你發佈的代碼中,我看到bool參數類型不正確:將其定義爲int。 Win32 BOOL是32位值,它與.NET中的int匹配。

發佈完整代碼:PInvoke定義和調用SetScrollInfo以獲取更多信息。

0

結構聲明:

[StructLayout(LayoutKind.Sequential)] 
    public class SCROLLINFO 
    { 
     public int cbSize; 
     public int fMask; 
     public int nMin; 
     public int nMax; 
     public int nPage; 
     public int nPos; 
     public int nTrackPos; 
     public SCROLLINFO() 
     { 
      cbSize = Marshal.SizeOf(typeof(SCROLLINFO)); 
     } 
     public SCROLLINFO(int mask, int min, int max, int page, int pos) 
     { 
      cbSize = Marshal.SizeOf(typeof(SCROLLINFO)); 
      fMask = mask; 
      nMin = min; 
      nMax = max; 
      nPage = page; 
      nPos = pos; 
     } 
    } 

調用: SCROLLINFO scrollinfo1 =新SCROLLINFO(); SetScrollInfo(new HandleRef(this,Handle),0,scrollinfo1,true);