回覆列表
  • 1 # 王小佳的慧慧

    C#中的IntPtr型別稱為“平臺特定的整數型別”,它們用於本機資源,如視窗控制代碼。資源的大小取決於使用的硬體和作業系統,但其大小總是足以包含系統的指標(因此也可以包含資源的名稱)。 所以,在您呼叫的API函式中一定有類似窗體控制代碼這樣的引數,那麼當您宣告這個函式時,您應該將它顯式地宣告為IntPtr型別。 例如,在一個C#程式中呼叫Win32API mciSendString函式控制光碟驅動器,這個函式的函式原型是: MCIERROR mciSendString( LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback ); 首先在C#中宣告這個函式: [DllImport("winmm.dll")] private static extern long mciSendString(string a,string b,uint c,IntPtr d); 然後用這樣的方法呼叫: mciSendString("set cdaudio door open", null, 0, this.Handle); 您也可以使用IntPtr.Zero將控制代碼設定為0; 或者使用型別強制轉換: mciSendString("set cdaudio door open", null, 0, (IntPtr)0 ); 或者,使用IntPtr建構函式: IntPtr a = new IntPtr(2121); 這裡有兩點比較重要: 一是在C#中宣告Win32API時,一定要按照WinAPI的原型來宣告,不要改變它的資料型別; 二是儘量不要過多使用型別強制轉換或建構函式的方式初始化一個IntPtr型別的變數,這樣會使程式變得難於理解並容易出錯。 希望這些資訊對您有幫助。

  • 中秋節和大豐收的關聯?
  • estar苦戰五局戰勝qg,諾言老夫子一抗五拿到mvp,怎麼評價他的表現?