C# 調用DLL

來源:互聯網
上載者:User

一直對調用DLL的概念模糊不清,今天先大致掃掃盲。

 

目前所知道的DLL有兩種調用方法,一種是作為COM組件,註冊後直接引用。

註冊:regsvr32 +檔案路徑+檔案名稱     一般WINDOWS系統都內建有一些的COM庫,可以讓編程者直接使用。但是一些自訂的,尤其是自己封裝的,就必須註冊一下,讓系統認識。

註冊後,直接引用COM組件就可以了。

 

對於有入口函數的DLL,也可以用直接調用的方法。首先必須將DLL與可執行檔放在一個路徑下。

然後是調用DLL檔案的格式:

 

基本:

[DLLImport(“DLL檔案”)] 

其他選擇性參數:

 

EntryPoint 表示使用DLL檔案中的某個方法,如:EntryPoint="MessageBoxA"

CharSet 指示用在進入點中的字元集,如:CharSet=CharSet.Ansi;

SetLastError 指示方法是否保留 Win32"上一錯誤",如:SetLastError=true;

ExactSpelling 指示 EntryPoint 是否必須與指示的進入點的拼字完全符合,如:ExactSpelling=false;

PreserveSig指示方法的簽名應當被保留還是被轉換, 如:PreserveSig=true;

CallingConvention指示進入點的呼叫慣例, 如:CallingConvention=CallingConvention.Winapi;

一個完整的DLLImport:

 

[DllImport("HHPT850.dll", EntryPoint = "MessageBoxA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]

 

引用後,還需要重新封裝為C#能識別的方法:

修飾符 extern 返回變數類型 方法名稱 (參數列表)

完整例子:

[DllImport("HHPT850.dll", EntryPoint = "MessageBoxA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]<br /> public static extern int MsgBox(int hWnd, string msg, string caption, int type); 


-----------------------------------------------------------------------------------------------------

對於.NET封裝的DLL,不用註冊成COM組件,也不用DLLImport,直接在引用處引用即可

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.