中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中如何調用DLL函數

發布時間:2021-06-24 16:24:18 來源:億速云 閱讀:297 作者:Leah 欄目:編程語言

C#中如何調用DLL函數,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

首先,理解托管代碼與非托管代碼的區別:

1.托管代碼所申請的資源統一由.Net Framework管理,你不用操心,非托管代碼所申請的內存等資源則需要你手動去釋放  

2.非托管程序運行會很快,是二進制的,托管程序好寫,但是速度就差的很多,資源會用的很多

3.“程序"一般都是在對操作系統進行直接或者間接的操作  

"托管程序"是需要通過訪問公共語言運行時(cls)才能訪問操作系統的程序,而“非托管程序”不用通過訪問公共語言運行時(cls)可以直接訪問操作系統的程序  

4.vb.net,C#等寫的程序是托管程序,VC++可以寫托管程序,如果用到了內存管理,則只能編譯為非托管程序

VC++寫托管的是要用.net的庫,因為我們沒有用.net,所以只用了非托管方式。

(一) C#調用DLL中的非托管函數一般方法

首先,應該在C#語言源程序中聲明外部方法,其基本形式是:

[DLLImport(“DLL文件”)]

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

其中:

DLL文件:包含定義外部方法的庫文件。

修飾符: 訪問修飾符,除了abstract以外在聲明方法時可以使用的修飾符。

返回變量類型:在DLL文件中你需調用方法的返回變量類型。

方法名稱:在DLL文件中你需調用方法的名稱。

參數列表:在DLL文件中你需調用方法的列表。

注意:需要在程序聲明中使用System.Runtime.InteropServices命名空間。

DllImport只能放置在方法聲明上。

DLL文件必須位于程序當前目錄或系統定義的查詢路徑中(即:系統環境變量中Path所設置的路徑)。

返回變量類型、方法名稱、參數列表一定要與DLL文件中的定義相一致。

其它可選的 DllImportAttribute 屬性:

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

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

ExactSpelling 指示 EntryPoint 是否必須與指示的入口點的拼寫完全匹配,如:ExactSpelling=false;

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

CallingConvention指示入口點的調用約定, 如:CallingConvention=CallingConvention.Winapi;

此外,關于“數據封送處理”及“封送數字和邏輯標量”請參閱其它一些文章。

舉例:

New file,選擇visual C# Class。在文件中,創建一個public的類。把待測試的函數在這個類中作聲明。

public class ClassName      {            [DllImport("xxx.dll", EntryPoint = "xx")]           public static extern int StartVideo(int nDevNum, int SwitchingChans, IntPtr Main, IntPtr hwndPreview);   }

Xxx為待測試的dll名稱,xx為dll中提供的方法函數。若要使用其它函數名,可以使用EntryPoint屬性設置。

如何用DllImport調用DLL中的非托管函數,但是這個是全局的函數,假若DLL中的非托管函數有一個靜態變量S,每次調用這個函數的時候,靜態變量S就自動加1。結果,當需要重新計數時,就不能得出想要的結果。所以,要注意啊,用DllImport調用DLL中的非托管函數是全局的、靜態的函數。

關于C#中如何調用DLL函數問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平和县| 印江| 凉城县| 安多县| 蛟河市| 吉林市| 长顺县| 全州县| 三门县| 阜新| 丰顺县| 淮安市| 尚义县| 舞钢市| 钟祥市| 明星| 中方县| 抚宁县| 南宁市| 沾益县| 京山县| 桂阳县| 察隅县| 双流县| 科尔| 靖边县| 水富县| 涪陵区| 香格里拉县| 无棣县| 绍兴市| 凌源市| 麦盖提县| 正镶白旗| 晋中市| 左云县| 冕宁县| 海阳市| 铜山县| 六盘水市| 平潭县|