Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
WINDOWS API adalah pustaka tautan dinamis (DLL) yang merupakan bagian dari sistem operasi Windows. Anda menggunakannya untuk melakukan tugas ketika sulit untuk menulis prosedur yang setara dengan prosedur Anda sendiri. Misalnya, Windows menyediakan fungsi bernama FlashWindowEx yang memungkinkan Anda membuat bilah judul untuk aplikasi bergantian antara nuansa terang dan gelap.
Keuntungan menggunakan API Windows dalam kode Anda adalah mereka dapat menghemat waktu pengembangan karena berisi puluhan fungsi berguna yang sudah ditulis dan menunggu untuk digunakan. Kerugiannya adalah bahwa API Windows bisa sulit untuk bekerja dengan dan tidak memaafkan ketika segala sesuatunya salah.
API Windows mewakili kategori interoperabilitas khusus. API Windows tidak menggunakan kode terkelola, tidak memiliki pustaka jenis bawaan, dan menggunakan jenis data yang berbeda dari yang digunakan dengan Visual Studio. Karena perbedaan ini, dan karena API Windows bukan objek COM, interoperabilitas dengan API Windows dan .NET Framework dilakukan menggunakan pemanggilan platform, atau PInvoke. Platform Invoke adalah layanan yang memungkinkan kode terkelola untuk memanggil fungsi tidak terkelola yang diimplementasikan dalam DLL. Untuk informasi selengkapnya, lihat Mengonsumsi Fungsi DLL Tidak Terkelola. Anda dapat menggunakan PInvoke di Visual Basic dengan menggunakan Declare pernyataan atau menerapkan DllImport atribut ke prosedur kosong.
Panggilan WINDOWS API adalah bagian penting dari pemrograman Visual Basic di masa lalu, tetapi jarang diperlukan dengan Visual Basic .NET. Jika memungkinkan, Anda harus menggunakan kode terkelola dari .NET Framework untuk melakukan tugas, bukan panggilan Windows API. Panduan ini menyediakan informasi untuk situasi di mana menggunakan WINDOWS API diperlukan.
Nota
Komputer Anda mungkin menampilkan nama atau lokasi yang berbeda untuk beberapa elemen antarmuka pengguna Visual Studio dalam instruksi berikut. Edisi Visual Studio yang Anda miliki dan pengaturan yang Anda gunakan menentukan elemen-elemen ini. Untuk informasi lebih lanjut, lihat Mempersonalisasi IDE.
Panggilan API Menggunakan Deklarasi
Cara paling umum untuk memanggil API Windows adalah dengan menggunakan Declare pernyataan .
Untuk mendeklarasikan prosedur DLL
Tentukan nama fungsi yang ingin Anda panggil, ditambah argumennya, jenis argumen, dan nilai yang dikembalikan, serta nama dan lokasi DLL yang berisinya.
Nota
Untuk informasi lengkap tentang WINDOWS API, lihat dokumentasi Win32 SDK di Platform SDK Windows API. Untuk informasi selengkapnya tentang konstanta yang digunakan WINDOWS API, periksa file header seperti Windows.h yang disertakan dengan Platform SDK.
Buka proyek Aplikasi Windows baru dengan mengklik Baru pada menu File , lalu klik Proyek. Kotak dialog Proyek Baru muncul.
Pilih Aplikasi Windows dari daftar templat proyek Visual Basic. Proyek baru telah ditampilkan.
Tambahkan fungsi berikut
Declareke kelas atau modul tempat Anda ingin menggunakan DLL:Declare Auto Function MBox Lib "user32.dll" Alias "MessageBox" ( ByVal hWnd As Integer, ByVal txt As String, ByVal caption As String, ByVal Typ As Integer) As Integer
Bagian dari Pernyataan Deklarasi
Pernyataan ini Declare mencakup elemen-elemen berikut.
Pengubah otomatis
Pengubah Auto menginstruksikan runtime untuk mengonversi string berdasarkan nama metode sesuai dengan aturan runtime bahasa umum (atau nama alias jika ditentukan).
Kata kunci Lib dan Alias
Nama yang Function mengikuti kata kunci adalah nama yang digunakan program Anda untuk mengakses fungsi yang diimpor. Ini bisa sama dengan nama asli fungsi yang Anda panggil, atau Anda dapat menggunakan nama prosedur yang valid dan kemudian menggunakan Alias kata kunci untuk menentukan nama asli fungsi yang Anda panggil.
Lib Tentukan kata kunci, diikuti dengan nama dan lokasi DLL yang berisi fungsi yang Anda panggil. Anda tidak perlu menentukan jalur untuk file yang terletak di direktori sistem Windows.
Alias Gunakan kata kunci jika nama fungsi yang Anda panggil bukan nama prosedur Visual Basic yang valid, atau bertentangan dengan nama item lain dalam aplikasi Anda.
Alias menunjukkan nama sebenarnya dari fungsi yang dipanggil.
Deklarasi Tipe Argumen dan Data
Deklarasikan argumen dan jenis datanya. Bagian ini bisa menantang karena jenis data yang digunakan Windows tidak sesuai dengan jenis data Visual Studio. Visual Basic melakukan banyak pekerjaan untuk Anda dengan mengonversi argumen ke jenis data yang kompatibel, proses yang disebut marshaling. Anda dapat secara eksplisit mengontrol bagaimana argumen dimarshall dengan menggunakan atribut MarshalAsAttribute yang ditentukan dalam namespace System.Runtime.InteropServices.
Nota
Versi Visual Basic sebelumnya memungkinkan Anda untuk mendeklarasikan parameter As Any, yang berarti bahwa data dari jenis data apa pun dapat digunakan. Visual Basic mengharuskan Anda menggunakan jenis data tertentu untuk semua Declare pernyataan.
Konstanta Windows API
Beberapa argumen adalah kombinasi konstanta. Misalnya, API yang MessageBox ditampilkan dalam panduan ini menerima argumen bilangan bulat yang disebut Typ yang mengontrol bagaimana kotak pesan ditampilkan. Anda dapat menentukan nilai numerik konstanta ini dengan memeriksa #define pernyataan dalam file WinUser.h. Nilai numerik umumnya ditampilkan dalam heksadesimal, jadi Anda mungkin ingin menggunakan kalkulator untuk menambahkannya dan mengonversinya ke desimal. Misalnya, jika Anda ingin menggabungkan konstanta untuk gaya MB_ICONEXCLAMATION seru 0x00000030 dan gaya MB_YESNO Ya/Tidak 0x00000004, Anda bisa menambahkan angka dan mendapatkan hasil 0x00000034, atau 52 desimal. Meskipun Anda dapat menggunakan hasil desimal secara langsung, lebih baik untuk mendeklarasikan nilai-nilai ini sebagai konstanta dalam aplikasi Anda dan menggabungkannya menggunakan Or operator.
Untuk mendeklarasikan konstanta untuk panggilan WINDOWS API
Lihat dokumentasi untuk fungsi Windows yang Anda panggil. Tentukan nama konstanta yang digunakannya dan nama file .h yang berisi nilai numerik untuk konstanta ini.
Gunakan editor teks, seperti Notepad, untuk melihat konten file header (.h), dan menemukan nilai yang terkait dengan konstanta yang Anda gunakan. Misalnya,
MessageBoxAPI menggunakan konstantaMB_ICONQUESTIONuntuk menampilkan tanda tanya di kotak pesan. Definisi untukMB_ICONQUESTIONberada di WinUser.h dan muncul sebagai berikut:#define MB_ICONQUESTION 0x00000020LTambahkan pernyataan yang setara
Constke kelas atau modul Anda untuk membuat konstanta ini tersedia untuk aplikasi Anda. Contohnya:Const MB_ICONQUESTION As Integer = &H20 Const MB_YESNO As Integer = &H4 Const IDYES As Integer = 6 Const IDNO As Integer = 7
Untuk memanggil prosedur DLL
Tambahkan tombol bernama
Button1ke formulir startup untuk proyek Anda, lalu klik dua kali untuk menampilkan kodenya. Penanganan aktivitas untuk tombol ditampilkan.Tambahkan kode ke penanganan
Clickaktivitas untuk tombol yang Anda tambahkan, untuk memanggil prosedur dan memberikan argumen yang sesuai:Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' Stores the return value. Dim RetVal As Integer RetVal = MBox(0, "Declare DLL Test", "Windows API MessageBox", MB_ICONQUESTION Or MB_YESNO) ' Check the return value. If RetVal = IDYES Then MsgBox("You chose Yes") Else MsgBox("You chose No") End If End SubJalankan proyek dengan menekan F5. Kotak pesan ditampilkan dengan tombol Ya dan Tidak ada respons. Klik salah satu.
Data Marshalling
Visual Basic secara otomatis mengonversi jenis data parameter dan mengembalikan nilai untuk panggilan Windows API, tetapi Anda dapat menggunakan MarshalAs atribut untuk secara eksplisit menentukan jenis data yang tidak dikelola yang diharapkan API. Untuk informasi selengkapnya tentang interop marshalling, lihat Interop Marshaling.
Untuk menggunakan Declare dan MarshalAs dalam panggilan API
Tentukan nama fungsi yang ingin Anda panggil, ditambah argumennya, jenis data, dan nilai yang dikembalikan.
Untuk menyederhanakan akses ke
MarshalAsatribut, tambahkanImportspernyataan ke bagian atas kode untuk kelas atau modul, seperti dalam contoh berikut:Imports System.Runtime.InteropServicesTambahkan prototipe fungsi untuk fungsi yang diimpor ke kelas atau modul yang Anda gunakan, dan terapkan
MarshalAsatribut ke parameter atau nilai pengembalian. Dalam contoh berikut, panggilan API yang mengharapkan tipevoid*dikonversi menjadiAsAny:Declare Sub SetData Lib "..\LIB\UnmgdLib.dll" ( ByVal x As Short, <MarshalAsAttribute(UnmanagedType.AsAny)> ByVal o As Object)
Panggilan API Menggunakan DllImport
Atribut ini DllImport menyediakan cara kedua untuk memanggil fungsi di DLL tanpa pustaka jenis.
DllImport kira-kira setara dengan menggunakan Declare pernyataan tetapi memberikan kontrol lebih besar atas bagaimana fungsi dipanggil.
Anda dapat menggunakan DllImport dengan sebagian besar panggilan Windows API selama panggilan mengacu pada metode bersama (kadang-kadang disebut statis). Anda tidak dapat menggunakan metode yang memerlukan instans kelas. Tidak seperti Declare pernyataan, DllImport panggilan tidak dapat menggunakan MarshalAs atribut .
Untuk memanggil API Windows menggunakan atribut DllImport
Buka proyek Aplikasi Windows baru dengan mengklik Baru pada menu File , lalu klik Proyek. Kotak dialog Proyek Baru muncul.
Pilih Aplikasi Windows dari daftar templat proyek Visual Basic. Proyek baru telah ditampilkan.
Tambahkan tombol bernama
Button2ke formulir startup.Button2Klik dua kali untuk membuka tampilan kode untuk formulir.Untuk menyederhanakan akses ke
DllImport, tambahkanImportspernyataan ke bagian atas kode untuk kelas formulir startup:Imports System.Runtime.InteropServicesDeklarasikan fungsi kosong sebelum
End Classpernyataan untuk formulir, dan beri nama fungsiMoveFile.Terapkan pengubah
PublicdanSharedke deklarasi fungsi dan atur parameter untukMoveFileberdasarkan argumen yang digunakan fungsi Windows API.Public Shared Function MoveFile( ByVal src As String, ByVal dst As String) As Boolean ' Leave the body of the function empty. End FunctionFungsi Anda dapat memiliki nama prosedur yang valid;
DllImportatribut menentukan nama dalam DLL. Ini juga menangani marshalling interoperabilitas untuk parameter dan nilai balikan, sehingga Anda dapat memilih tipe data Visual Studio yang mirip dengan tipe data yang digunakan API.Terapkan
DllImportatribut ke fungsi kosong. Parameter pertama adalah nama dan lokasi DLL yang berisi fungsi yang Anda panggil. Anda tidak perlu menentukan jalur untuk file yang terletak di direktori sistem Windows. Parameter kedua adalah argumen bernama yang menentukan nama fungsi di Windows API. Dalam contoh ini,DllImportatribut memaksa panggilan untukMoveFilediteruskan keMoveFileWdalam KERNEL32.DLL. MetodeMoveFileWmenyalin file dari jalursrcke jalurdst.<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 FunctionTambahkan kode ke penanganan
Button2_Clickaktivitas untuk memanggil fungsi: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 SubBuat file bernama Test.txt dan letakkan di direktori C:\Tmp di hard drive Anda. Buat direktori Tmp jika perlu.
Tekan F5 untuk memulai aplikasi. Formulir utama muncul.
Klik Tombol2. Pesan "File berhasil dipindahkan" ditampilkan jika file dapat dipindahkan.