DllImport

DllImport

DllImport 作為一種屬性提供第二種方法調用不帶類型庫的 DLL 中的函式。DllImport 大致與使用 Declare 語句等效,但對如何調用函式提供更多的控制。

簡介

可以將大多數 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”。

相關詞條

相關搜尋

熱門詞條

聯絡我們