複製鏈接
請複製以下鏈接發送給好友

DllImport

鎖定
DllImport 作為一種屬性提供第二種方法調用不帶類型庫的 DLL 中的函數。DllImport 大致與使用 Declare 語句等效,但對如何調用函數提供更多的控制。
中文名
DllImport
所屬學科
計算機
釋    義
作為一種屬性提供第二種方法調用不帶類型庫的 DLL 中的函數

目錄

DllImport簡介

可以將大多數 Windows API 調用與 DllImport 一起使用,只要該調用引用的是共享(有時稱為“靜態”)方法就可以。不能使用需要類實例的方法。與 Declare 語句不同,DllImport 調用不能使用 MarshalAs 屬性。

DllImport特徵

使用 DllImport 屬性調用 Windows API
通過在“文件”菜單上單擊“新建”,然後單擊“項目”,打開一個新的“Windows 應用程序”項目。出現“新建項目”對話框。
從 Visual Basic 項目模板的列表中選擇“Windows 應用程序”。將顯示新項目。
將一個名為 Button2 的按鈕添加到啓動窗體上。
雙擊 Button2 打開窗體的代碼視圖
要簡化對 DllImport 的訪問,請向啓動窗口類的代碼頂部添加一條 Imports 語句:
Visual Basic 複製代碼
Imports System.Runtime.InteropServices
在 End Class 語句之前為窗體聲明一個空函數,並將函數命名為 MoveFile。
將 Public 和 Shared 修飾符應用到函數聲明中,並基於 Windows API 函數使用的參數來設置 MoveFile 的參數:
Visual Basic 複製代碼
Public Shared Function MoveFile( _
ByVal src As String, _
ByVal dst As String) _
As Boolean
' Leave the body of the function empty.
End Function
函數可以有任意一個有效的過程名;DllImport 屬性指定 DLL 中的名稱。它還為參數和返回值處理互操作封送處理,因此可以選擇與 API 使用的數據類型相似的 Visual Studio 數據類型。
將 DllImport 屬性應用到空函數中。第一個參數是包含要調用的函數的 DLL 的名稱和位置。不必為位於 Windows 系統目錄下的文件指定路徑。第二個參數是一個命名參數,指定 Windows API 中的函數名稱。在本示例中,DllImport 屬性強制將 MoveFile 調用轉發給 KERNEL32.DLL 中的 MoveFileW。MoveFileW 方法將文件從路徑 src 複製到路徑 dst。
Visual Basic 複製代碼
<DllImport("KERNEL32.DLL", EntryPoint:="MoveFileW", SetLastError:=True, _
CharSet:=CharSet.Unicode, ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function MoveFile( _
ByVal src As String, _
ByVal dst As String) _
As Boolean
' Leave the body of the function empty.
End Function
將代碼添加到 Button2_Click 事件處理程序,以調用函數:
Visual Basic 複製代碼
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
Dim RetVal As Boolean = MoveFile("c:\tmp\Test.txt", "c:\Test.txt")
If RetVal = True Then
MsgBox("The file was moved successfully.")
Else
MsgBox("The file could not be moved.")
End If
End Sub
創建名為 Test.Txt 的文件並將其放在您硬盤的 C:\Tmp 目錄下。如果有必要,可創建 Tmp 目錄。
按 F5 鍵啓動該應用程序。將顯示主窗體。
單擊“Button2”。若文件可以移動,則顯示“The file was moved successfully”。