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