2013/10/21

on
● -- ●
.■■■ - 每種編程語言調用DLL的方法都不盡相同,一般可以認為:非託管代碼主要是基於 win 32平台開發的DLL,activeX的組件,託管代碼是基於.net平台開發的。
.■■■ - 動態鏈接庫(也稱為DLL,「Dynamic Link Library」的縮寫)
.■■■ - 調用DLL中的非託管函數一般方法

首先,應該在C#語言源程序中聲明外部方法,其基本形式是:
[DLLImport(「DLL文件」)]
修飾符 extern 返回變量類型 方法名稱 (參數列表)
其中:
DLL文件:包含定義外部方法的庫文件。
修飾符:訪問修飾符,除了abstract以外在聲明方法時可以使用的修飾符。
返回變量類型:在DLL文件中你需調用方法的返回變量類型。
方法名稱:在DLL文件中你需調用方法的名稱。
參數列表:在DLL文件中你需調用方法的列表。
注意:需要在程序聲明中使用System.Runtime.InteropServices命名空間。

DllImport只能放置在方法聲明上。
DLL文件必須位於程序當前目錄或系統定義的查詢路徑中(即:系統環境變量中Path
所設置的路徑)。
返回變量類型、方法名稱、參數列表一定要與DLL文件中的定義相一致。
若要使用其它函數名,可以使用EntryPoint屬性設置,如:
[DllImport("user32.dll", EntryPoint="MessageBoxA")]
static extern int MsgBox(int hWnd, string msg, string caption, int type);
其它可選的DllImportAttribute 屬性:
CharSet 指示用在入口點中的字符集,如:CharSet=CharSet.Ansi;
SetLastError 指示方法是否保留Win32"上一錯誤",如:SetLastError=true;
ExactSpelling 指示EntryPoint 是否必須與指示的入口點的拼寫完全匹配,如:ExactSpelling=false;
PreserveSig 指示方法的簽名應當被保留還是被轉換,如:PreserveSig=true;
CallingConvention 指示入口點的調用約定,如:CallingConvention=CallingConvention.Winapi;
.■■■ -
.■■■ -
.■■■ -
.■■■ -
.■■■ -

-
-

0 意見: