Declare Deyimi
Dış dosyada uygulanan bir yordama başvuru bildirir.
Sözdizimi
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Overloads ] _
Declare [ charsetmodifier ] [ Sub ] name Lib "libname" _
[ Alias "aliasname" ] [ ([ parameterlist ]) ]
' -or-
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Overloads ] _
Declare [ charsetmodifier ] [ Function ] name Lib "libname" _
[ Alias "aliasname" ] [ ([ parameterlist ]) ] [ As returntype ]
Parça
Süre | Tanım |
---|---|
attributelist |
isteğe bağlı. Bkz. Öznitelik Listesi. |
accessmodifier |
isteğe bağlı. Aşağıdakilerden biri olabilir: - Public - Protected - Friend - Private - Protected Friend - Private Protected Bkz. Visual Basic'te erişim düzeyleri. |
Shadows |
isteğe bağlı. Bkz. Gölgeler. |
charsetmodifier |
isteğe bağlı. Karakter kümesi ve dosya arama bilgilerini belirtir. Aşağıdakilerden biri olabilir: - Ansi (varsayılan) - Unicode - Auto |
Sub |
İsteğe bağlı, ancak ya da Sub Function görünmelidir. Dış yordamın bir değer döndürmediğini gösterir. |
Function |
İsteğe bağlı, ancak ya da Sub Function görünmelidir. Dış yordamın bir değer döndürdüğünü gösterir. |
name |
Gerekli. Bu dış başvurunun adı. Daha fazla bilgi için bkz . Bildirilen Öğe Adları. |
Lib |
Gerekli. Lib Dış yordam içeren dış dosyayı (DLL veya kod kaynağı) tanımlayan bir yan tümcesi ekler. |
libname |
Gerekli. Bildirilen yordamı içeren dosyanın adı. |
Alias |
isteğe bağlı. Bildirilmekte olan yordamın dosyasında belirtilen name adla tanımlanamayacağını gösterir. tanımlamasını içinde aliasname belirtirsiniz. |
aliasname |
Anahtar sözcüğünü Alias kullanıyorsanız gereklidir. Yordamı iki yoldan biriyle tanımlayan dize:Yordamın dosyasındaki giriş noktası adı, tırnak işaretleri içinde ( "" )-veya- Bir sayı işareti ( # ) ve ardından yordamın dosyasındaki giriş noktasının sıra numarasını belirten bir tamsayı |
parameterlist |
Yordam parametreleri alıyorsa gereklidir. Bkz. Parametre Listesi. |
returntype |
belirtilirse Function ve Option Strict ise gereklidir On . Yordam tarafından döndürülen değerin veri türü. |
Açıklamalar
Bazen projenizin dışındaki bir dosyada (DLL veya kod kaynağı gibi) tanımlanan bir yordamı çağırmanız gerekir. Bunu yaptığınızda, Visual Basic derleyicisi yordamın nerede bulunduğu, nasıl tanımlandığı, çağrı dizisi ve dönüş türü ve kullandığı dize karakter kümesi gibi yordamı doğru çağırmak için gereken bilgilere erişemez. deyimi Declare
, bir dış yordama başvuru oluşturur ve bu gerekli bilgileri sağlar.
Yalnızca modül düzeyinde kullanabilirsiniz Declare
. Bu, dış başvurunun bildirim bağlamının bir sınıf, yapı veya modül olması gerektiği ve kaynak dosya, ad alanı, arabirim, yordam veya blok olamayacağı anlamına gelir. Daha fazla bilgi için bkz . Bildirim Bağlamları ve Varsayılan Erişim Düzeyleri.
Dış başvurular varsayılan olarak Genel erişim olarak gösterilir. Erişim değiştiricileri ile erişim düzeylerini ayarlayabilirsiniz.
Kurallar
Öznitelikler. Dış başvuruya öznitelikler uygulayabilirsiniz. Uyguladığınız tüm öznitelikler dış dosyada değil yalnızca projenizde etkili olur.
Değiştirici. Dış yordamlar örtük olarak Paylaşılır. Dış başvuru bildirirken anahtar sözcüğünü
Shared
kullanamazsınız ve paylaşılan durumunu değiştiremezsiniz.Dış yordam geçersiz kılmaya katılamaz, arabirim üyeleri uygulayamaz veya olayları işleyemez. Buna göre, deyiminde
Overrides
Declare
,Overridable
,NotOverridable
,MustOverride
,Implements
veyaHandles
anahtar sözcüğünü kullanamazsınız.Dış Yordam Adı. Bu dış başvuruya, yordamın dış dosyası () içindeki giriş noktası adıyla aynı adı (
aliasname
içindename
) vermeniz gerekmez. Giriş noktası adını belirtmek için birAlias
yan tümce kullanabilirsiniz. Bu, dış yordamın Visual Basic ayrılmış değiştiricisi veya değişken, yordam veya aynı kapsamdaki başka bir programlama öğesiyle aynı ada sahip olması durumunda yararlı olabilir.Not
Çoğu DLL'deki giriş noktası adları büyük/küçük harfe duyarlıdır.
Dış Yordam Numarası. Alternatif olarak, dış dosyanın dışarı aktarma tablosundaki giriş noktasının sıra numarasını belirtmek için bir
Alias
yan tümce kullanabilirsiniz. Bunu yapmak için bir sayı işareti (#
ile başlarsınızaliasname
). Bu, Visual Basic'te dış yordam adında herhangi bir karaktere izin verilmiyorsa veya dış dosya yordamı bir ad olmadan dışarı aktarıyorsa yararlı olabilir.
Veri Türü Kuralları
Parametre Veri Türleri. ise
Option Strict
On
, içindeki her parametreninparameterlist
veri türünü belirtmeniz gerekir. Bu herhangi bir veri türü veya numaralandırma, yapı, sınıf veya arabirimin adı olabilir. içindeparameterlist
, her parametreye geçirilecek bağımsız değişkenin veri türünü belirtmek için birAs
yan tümcesi kullanırsınız.Not
Dış yordam .NET Framework için yazılmadıysa, veri türlerinin karşılık geldiğini dikkate almanız gerekir. Örneğin, bir parametresi (Visual Basic 6.0'da 16 bit) olan bir
Integer
Visual Basic 6.0 yordamına dış başvuru bildirirseniz, Visual Basic'teki 16 bit tamsayı türü olduğundan, ilgili bağımsız değişkeni deyimindeDeclare
olduğu gibiShort
tanımlamanız gerekir. Benzer şekilde,Long
Visual Basic 6.0'da farklı bir veri genişliğine sahiptir veDate
farklı şekilde uygulanır.Veri Türü döndür. Dış yordam bir
Function
ise veOption Strict
iseOn
, çağıran koda döndürülen değerin veri türünü belirtmeniz gerekir. Bu herhangi bir veri türü veya numaralandırma, yapı, sınıf veya arabirimin adı olabilir.Not
Visual Basic derleyicisi, veri türlerinizin dış yordamdakilerle uyumlu olduğunu doğrulamaz. Uyuşmazlık varsa, ortak dil çalışma zamanı çalışma zamanında bir MarshalDirectiveException özel durum oluşturur.
Varsayılan Veri Türleri. ise
Option Strict
Off
ve içindeparameterlist
bir parametrenin veri türünü belirtmezseniz, Visual Basic derleyicisi ilgili bağımsız değişkeni Nesne Veri Türüne dönüştürür. Benzer şekilde, belirtmezsenizreturntype
, derleyici dönüş veri türünü olarakObject
alır.Not
Farklı bir platformda yazılmış olabilecek bir dış yordamla ilgilendiğiniz için, veri türleri hakkında herhangi bir varsayımda bulunmak veya varsayılan olarak izin vermek tehlikelidir. Varsa, her parametrenin ve dönüş değerinin veri türünü belirtmek çok daha güvenlidir. Bu, kodunuzun okunabilirliğini de artırır.
Davranış
Kapsam. Dış başvuru, sınıfı, yapısı veya modülü boyunca kapsam içindedir.
Ömür. Dış başvuru, içinde bildirildiği sınıf, yapı veya modülle aynı yaşam süresine sahiptir.
Dış Yordam Çağırma. Bir dış yordamı, bir
Function
veyaSub
yordamı çağırdığınız gibi çağırırsınız; bunu bir değer döndürürse bir ifadede veya bir değer döndürmezse bir Call Deyiminde belirterek kullanabilirsiniz.Bağımsız değişkenleri deyiminde belirtildiği gibi
parameterlist
dış yordamaDeclare
geçirirsiniz. Parametrelerin ilk olarak dış dosyada nasıl bildirildiğini dikkate almayın. Benzer şekilde, bir dönüş değeri varsa, deyimindeDeclare
tarafındanreturntype
belirtilen şekilde tam olarak kullanın.Karakter Kümeleri. Visual Basic'in
charsetmodifier
dış yordamı çağırdığında dizeleri nasıl hazırlaması gerektiğini belirtebilirsiniz. Değiştirici, Visual Basic'iAnsi
tüm dizeleri ANSI değerlerine sıralamaya yönlendirir veUnicode
değiştirici bunu tüm dizeleri Unicode değerlerine sıralamaya yönlendirir. Değiştirici, Visual Basic'iAuto
dış başvuruyaname
göre veyaaliasname
belirtildiyse dizeleri .NET Framework kurallarına göre sıralamaya yönlendirir. Varsayılan değer şudur:Ansi
.charsetmodifier
ayrıca Visual Basic'in dış dosyasındaki dış yordamı nasıl araması gerektiğini de belirtir.Ansi
veUnicode
her ikisi de Visual Basic'i arama sırasında adını değiştirmeden aramaya yönlendirir.Auto
Visual Basic'i çalışma zamanı platformunun temel karakter kümesini belirlemeye ve büyük olasılıkla dış yordam adını aşağıdaki gibi değiştirmeye yönlendirir:Windows gibi bir Unicode platformunda, ilk olarak ad değişikliği olmadan dış yordamı arayın. Bu başarısız olursa, dış yordam adının sonuna "W" ekleyin ve yeniden arayın.
ANSI platformunda ilk olarak ad değişikliği yapmadan dış yordamı arayın. Bu başarısız olursa, dış yordam adının sonuna "A" ekleyin ve yeniden arayın.
Mekanizması. Visual Basic, dış yordamları çözümlemek ve bu yordamlara erişmek için .NET Framework platform çağırma (PInvoke) mekanizmasını kullanır. Hem
Declare
deyimi hem de sınıfı bu mekanizmayı DllImportAttribute otomatik olarak kullanır ve PInvoke hakkında herhangi bir bilgiye ihtiyacınız yoktur. Daha fazla bilgi için bkz . İzlenecek yol: Windows API'lerini çağırma.
Önemli
Dış yordam ortak dil çalışma zamanı (CLR) dışında çalışıyorsa, yönetilmeyen koddur. Windows API işlevi veya COM yöntemi gibi bir yordam çağırdığınızda uygulamanızı güvenlik risklerine maruz bırakabilirsiniz. Daha fazla bilgi için bkz . Yönetilmeyen Kod için Güvenli Kodlama Yönergeleri.
Örnek 1
Aşağıdaki örnek, geçerli kullanıcı adını döndüren bir Function
yordama dış başvuru bildirir. Ardından, yordamın bir parçası getUser
olarak dış yordamı GetUserNameA
çağırır.
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (
ByVal lpBuffer As String, ByRef nSize As Integer) As Integer
Sub GetUser()
Dim buffer As String = New String(CChar(" "), 25)
Dim retVal As Integer = GetUserName(buffer, 25)
Dim userName As String = Strings.Left(buffer, InStr(buffer, Chr(0)) - 1)
MsgBox(userName)
End Sub
Örnek 2
, DllImportAttribute yönetilmeyen kodda işlevleri kullanmanın alternatif bir yolunu sağlar. Aşağıdaki örnekte deyimi kullanılmadan içeri aktarılan bir Declare
işlev bildirilir.
' Add an Imports statement at the top of the class, structure, or
' module that uses the DllImport attribute.
Imports System.Runtime.InteropServices
<DllImportAttribute("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
' This function copies a file from the path src to the path dst.
' Leave this function empty. The DLLImport attribute forces calls
' to MoveFile to be forwarded to MoveFileW in KERNEL32.DLL.
End Function