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 SubFunction görünmelidir. Dış yordamın bir değer döndürmediğini gösterir.
Function İsteğe bağlı, ancak ya da SubFunction 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 nameadla tanımlanamayacağını gösterir. tanımlamasını içinde aliasnamebelirtirsiniz.
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 OverridesDeclare , Overridable, NotOverridable, MustOverride, Implementsveya Handles 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ı (aliasnameiçindename) vermeniz gerekmez. Giriş noktası adını belirtmek için bir Alias 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 StrictOn, içindeki her parametrenin parameterlistveri türünü belirtmeniz gerekir. Bu herhangi bir veri türü veya numaralandırma, yapı, sınıf veya arabirimin adı olabilir. içinde parameterlist, her parametreye geçirilecek bağımsız değişkenin veri türünü belirtmek için bir As 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 deyiminde Declare olduğu gibi Short tanımlamanız gerekir. Benzer şekilde, Long Visual Basic 6.0'da farklı bir veri genişliğine sahiptir ve Date farklı şekilde uygulanır.

  • Veri Türü döndür. Dış yordam bir Function ise ve Option Strict ise On, ç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 StrictOff ve içinde parameterlistbir 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, belirtmezseniz returntype, derleyici dönüş veri türünü olarak Objectalı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 veya Sub 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ış yordama Declare geçirirsiniz. Parametrelerin ilk olarak dış dosyada nasıl bildirildiğini dikkate almayın. Benzer şekilde, bir dönüş değeri varsa, deyiminde Declare tarafından returntype 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'i Ansi tüm dizeleri ANSI değerlerine sıralamaya yönlendirir ve Unicode değiştirici bunu tüm dizeleri Unicode değerlerine sıralamaya yönlendirir. Değiştirici, Visual Basic'i Auto dış başvuruya namegöre veya aliasname 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 ve Unicode 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

Ayrıca bkz.