Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows API'leri, Windows işletim sisteminin parçası olan dinamik bağlantı kitaplıklarıdır (DLL'ler). Bunları, kendi eşdeğer yordamlarınızı yazmak zor olduğunda görevleri gerçekleştirmek için kullanırsınız. Örneğin Windows, bir uygulamanın başlık çubuğunu açık ve koyu tonlar arasında geçiş yapmanızı sağlayan adlı FlashWindowEx
bir işlev sağlar.
Kodunuzda Windows API'lerini kullanmanın avantajı, önceden yazılmış ve kullanılmayı bekleyen onlarca yararlı işlev içerdiğinden geliştirme zamanından tasarruf etmelerini sağlamaktır. Dezavantajı, Windows API'leriyle çalışmanın zor olması ve işler yolunda gitmediğinde affedilemez olmasıdır.
Windows API'leri özel bir birlikte çalışabilirlik kategorisini temsil eden bir kategoridir. Windows API'leri yönetilen kod kullanmaz, yerleşik tür kitaplıkları içermez ve Visual Studio ile kullanılanlardan farklı veri türlerini kullanır. Bu farklılıklar nedeniyle ve Windows API'leri COM nesneleri olmadığından, Windows API'leri ve .NET Framework ile birlikte çalışabilirlik platform çağrısı veya PInvoke kullanılarak gerçekleştirilir. Platform çağırma, yönetilen kodun DLL'lerde uygulanan yönetilmeyen işlevleri çağırmasını sağlayan bir hizmettir. Daha fazla bilgi için bkz . Yönetilmeyen DLL İşlevlerini Kullanma. Visual Basic'te PInvoke'u, boş bir yordama Declare
deyimini kullanarak veya DllImport
özniteliğini uygulayarak kullanabilirsiniz.
Windows API çağrıları geçmişte Visual Basic programlamasının önemli bir parçasıydı, ancak Visual Basic .NET ile nadiren gerekliydi. Mümkün olduğunda, Görevleri gerçekleştirmek için Windows API çağrıları yerine .NET Framework'ten yönetilen kod kullanmanız gerekir. Bu izlenecek yol, Windows API'lerinin kullanılması gereken durumlar için bilgi sağlar.
Uyarı
Bilgisayarınız, aşağıdaki yönergelerde bazı Visual Studio kullanıcı arabirimi öğeleri için farklı adlar veya konumlar gösterebilir. Sahip olduğunuz Visual Studio sürümü ve kullandığınız ayarlar bu öğeleri belirler. Daha fazla bilgi için bkz. IDE'yi Kişiselleştirme.
Declare Kullanan API Çağrıları
Windows API'lerini çağırmanın en yaygın yolu deyimini Declare
kullanmaktır.
Bir DLL prosedürünü bildirmek için
Çağırmak istediğiniz işlevin adını, ayrıca bağımsız değişkenlerini, bağımsız değişken türlerini ve dönüş değerini, ayrıca onu içeren DLL'nin adını ve konumunu belirleyin.
Uyarı
Windows API'leri hakkında tam bilgi için Platform SDK Windows API'sindeki Win32 SDK belgelerine bakın. Windows API'lerinin kullandığı sabitler hakkında daha fazla bilgi için Platform SDK'sı ile birlikte gelen Windows.h gibi üst bilgi dosyalarını inceleyin.
Dosya menüsünde Yeni'ye ve ardından Proje'ye tıklayarak yeni bir Windows Uygulaması projesi açın. Yeni Proje iletişim kutusu görünür.
Visual Basic proje şablonları listesinden Windows Uygulaması'nı seçin. Yeni proje görüntülenir.
DLL'yi kullanmak istediğiniz sınıfa veya modüle aşağıdaki
Declare
işlevi ekleyin: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
Declare İfadesinin Bölümleri
deyimi Declare
aşağıdaki öğeleri içerir.
Otomatik değiştirici
Değiştirici, Auto
çalışma zamanına dizeyi yöntem adına göre ortak dil çalışma zamanı kurallarına (veya belirtilirse diğer ad) göre dönüştürmesini ister.
Lib ve Takma Ad anahtar sözcükleri
Anahtar sözcüğünü Function
izleyen ad, programınızın içeri aktarılan işleve erişmek için kullandığı addır. Çağırdığınız işlevin gerçek adıyla aynı olabilir veya geçerli bir yordam adı kullanabilir ve ardından çağırdığınız işlevin gerçek adını belirtmek için anahtar sözcüğünü kullanabilirsiniz Alias
.
Anahtar sözcüğünü Lib
ve ardından çağırdığınız işlevi içeren DLL'nin adını ve konumunu belirtin. Windows sistem dizinlerinde bulunan dosyaların yolunu belirtmeniz gerekmez.
Alias
Çağırdığınız işlevin adı geçerli bir Visual Basic yordam adı değilse veya uygulamanızdaki diğer öğelerin adıyla çakıyorsa anahtar sözcüğünü kullanın.
Alias
çağrılan işlevin gerçek adını gösterir.
Parametre ve Veri Türü Bildirimleri
Bağımsız değişkenleri ve bunların veri türlerini bildirin. Windows'un kullandığı veri türleri Visual Studio veri türlerine karşılık gelemediğinden bu bölüm zor olabilir. Visual Basic, bağımsız değişkenleri uyumlu veri türlerine dönüştürerek sizin için büyük bir iş yapar. Bu işleme ise marshaling adı verilir. MarshalAsAttribute ad alanında tanımlanan System.Runtime.InteropServices özniteliğini kullanarak bağımsız değişkenlerin nasıl yönlendirildiğini açıkça denetleyebilirsiniz.
Uyarı
Visual Basic'in önceki sürümleri, herhangi bir veri türüne ait verilerin kullanılabileceğini belirten parametreleri As Any
bildirmenize izin verdi. Visual Basic, tüm Declare
deyimler için belirli bir veri türü kullanmanızı gerektirir.
Windows API Sabitleri
Bazı bağımsız değişkenler sabitlerle oluşturulan kombinasyonlardır. Örneğin, bu kılavuzda gösterilen API, MessageBox
ileti kutusunun nasıl görüntüleneceğini denetleen adlı Typ
bir tamsayı bağımsız değişkenini kabul eder. WinUser.h dosyasındaki deyimleri inceleyerek #define
bu sabitlerin sayısal değerini belirleyebilirsiniz. Sayısal değerler genellikle onaltılık olarak gösterilir, bu nedenle bunları eklemek ve ondalık değere dönüştürmek için bir hesap makinesi kullanmak isteyebilirsiniz. Örneğin, ünlem stili 0x00000030 ve Evet/Hayır stili MB_ICONEXCLAMATION
MB_YESNO
0x00000004 için sabitleri birleştirmek istiyorsanız, sayıları ekleyebilir ve 0x00000034 veya 52 ondalık sonucunu alabilirsiniz. Ondalık sonucu doğrudan kullanabilirsiniz, ancak bu değerleri uygulamanızda sabit olarak bildirmek ve işlecini Or
kullanarak birleştirmek daha iyidir.
Windows API çağrıları için sabitleri bildirmek için
Çağırdığınız Windows işlevinin belgelerine bakın. Kullandığı sabitlerin adını ve bu sabitlerin sayısal değerlerini içeren .h dosyasının adını belirleyin.
Üst bilgi (.h) dosyasının içeriğini görüntülemek ve kullandığınız sabitlerle ilişkili değerleri bulmak için Not Defteri gibi bir metin düzenleyicisi kullanın. Örneğin,
MessageBox
APIMB_ICONQUESTION
sabitini, ileti kutusunda soru işareti göstermek için kullanır. içinMB_ICONQUESTION
tanımı WinUser.h içindedir ve aşağıdaki gibi görünür:#define MB_ICONQUESTION 0x00000020L
Bu sabitleri uygulamanız için kullanılabilir hale getirmek için sınıfınıza veya modülünüze eşdeğer
Const
deyimler ekleyin. Örneğin:Const MB_ICONQUESTION As Integer = &H20 Const MB_YESNO As Integer = &H4 Const IDYES As Integer = 6 Const IDNO As Integer = 7
DLL prosedürünü çağırmak için
Projenizin başlangıç formuna adlı
Button1
bir düğme ekleyin ve kodunu görüntülemek için çift tıklayın. Düğmenin olay işleyicisi görüntülenir.Eklediğiniz düğme için
Click
olay işleyicisine yordamı çağırmak ve uygun bağımsız değişkenleri sağlamak için kod ekleyin.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 Sub
F5 tuşuna basarak projeyi çalıştırın. İleti kutusu hem Evet hem de Hayır yanıt düğmeleriyle görüntülenir. Bunlardan birine tıklayın.
Veri Toplama ve Düzenleme
Visual Basic, Windows API çağrıları için parametre ve dönüş değerlerinin veri türlerini otomatik olarak dönüştürür, ancak api'nin beklediği yönetilmeyen veri türlerini açıkça belirtmek için özniteliğini kullanabilirsiniz MarshalAs
. Birlikte çalışma hazırlama hakkında daha fazla bilgi için bkz. Birlikte Çalışma Hazırlama.
API çağrısında Declare ve MarshalAs kullanmak için
Çağırmak istediğiniz işlevin adını, ayrıca bağımsız değişkenlerini, veri türlerini ve dönüş değerini belirleyin.
Özniteliğine
MarshalAs
erişimi basitleştirmek için, aşağıdaki örnekte olduğu gibi sınıfın veya modülün kodunun en üstüne birImports
deyim ekleyin:Imports System.Runtime.InteropServices
İçeri aktarılan işlev için kullandığınız sınıfa veya modüle bir işlev prototipi ekleyin ve özniteliğini parametrelere veya dönüş değerine uygulayın
MarshalAs
. Aşağıdaki örnekte,void*
türünü bekleyen bir API çağrısıAsAny
olarak düzenlenir:Declare Sub SetData Lib "..\LIB\UnmgdLib.dll" ( ByVal x As Short, <MarshalAsAttribute(UnmanagedType.AsAny)> ByVal o As Object)
DllImport Kullanan API Çağrıları
özniteliği, DllImport
tür kitaplıkları olmadan DLL'lerdeki işlevleri çağırmak için ikinci bir yol sağlar.
DllImport
kabaca bir Declare
deyimi kullanmakla eşdeğerdir, ancak işlevlerin nasıl çağrıldığı üzerinde daha fazla denetim sağlar.
DllImport
, çoğu Windows API çağrısıyla, çağrı bir paylaşılan (bazen statik olarak da adlandırılan) yöntemine başvurduğu sürece kullanabilirsiniz. Bir sınıfın örneğini gerektiren yöntemleri kullanamazsınız. İfadelerin aksine, Declare
çağrılar DllImport
özelliğini MarshalAs
kullanamaz.
DllImport özniteliğini kullanarak bir Windows API'sini çağırmak için
Dosya menüsünde Yeni'ye ve ardından Proje'ye tıklayarak yeni bir Windows Uygulaması projesi açın. Yeni Proje iletişim kutusu görünür.
Visual Basic proje şablonları listesinden Windows Uygulaması'nı seçin. Yeni proje görüntülenir.
Başlangıç formuna adlı
Button2
bir düğme ekleyin.Formun kod görünümünü açmak için çift tıklayın
Button2
.öğesine erişimi basitleştirmek için
DllImport
başlangıç formu sınıfının kodunun en üstüne birImports
deyim ekleyin:Imports System.Runtime.InteropServices
Formun deyiminden
End Class
önce boş bir işlev bildirin ve işleviMoveFile
olarak adlandırın.Public
veShared
değiştiricilerini işlev bildirimine uygulayın ve Windows API işlevinin kullandığı bağımsız değişkenlere göreMoveFile
parametrelerini ayarlayın:Public Shared Function MoveFile( ByVal src As String, ByVal dst As String) As Boolean ' Leave the body of the function empty. End Function
İşlevinizin geçerli bir yordam adı olabilir;
DllImport
özniteliği DLL'deki adı belirtir. Ayrıca parametreler ve dönüş değerleri için birlikte çalışabilirlik sıralamasını işler, böylece API'nin kullandığı veri türlerine benzer Visual Studio veri türlerini seçebilirsiniz.Boş fonksiyona
DllImport
özniteliği uygulayın. İlk parametre, çağırdığınız işlevi içeren DLL'nin adı ve konumudur. Windows sistem dizinlerinde bulunan dosyaların yolunu belirtmeniz gerekmez. İkinci parametre, Windows API'sindeki işlevin adını belirten adlandırılmış bir bağımsız değişkendir. Bu örnekte,DllImport
özniteliğiMoveFile
çağrılarının KERNEL32.DLL'deMoveFileW
'ye yönlendirilmesini zorlar.MoveFileW
yöntemi, bir dosyayısrc
yolundandst
yoluna kopyalar.<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
İşlevi
Button2_Click
çağırmak için olay işleyicisine kod ekleyin: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 adlı bir dosya oluşturun ve sabit sürücünüzdeki C:\Tmp dizinine yerleştirin. Gerekirse Tmp dizinini oluşturun.
Uygulamayı başlatmak için F5 tuşuna basın. Ana form görünür.
Düğme2'ye tıklayın. Dosya taşınabiliyorsa "Dosya başarıyla taşındı" iletisi görüntülenir.