Declare Deyimi

Dış dosyada uygulanan bir yordama başvuru bildirir.

Syntax

[ <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 ]

Bölümler

Süre Tanım
attributelist İsteğe bağlı. Bkz. öznitelik listesi.
accessmodifier İsteğe bağlı. Aşağıdakilerden biri olabilir:

- Geneldir
- Korunamadı
- Dost
- Özelleştirme
- Korumalı arkadaş
- Özel korumalı

Visual Basic erişim düzeylerinebakın.
Shadows İsteğe bağlı. Bkz. gölgeler.
charsetmodifier İsteğe bağlı. Karakter kümesi ve dosya arama bilgilerini belirtir. Aşağıdakilerden biri olabilir:

- ANSI (varsayılan)
- Kodlamaları
- Otomatik
Sub İsteğe bağlı, ancak ya da Sub Function görünür olmalıdır. Dış yordamın bir değer döndürmediğini belirtir.
Function İsteğe bağlı, ancak ya da Sub Function görünür olmalıdır. Dış yordamın bir değer döndürdüğünü gösterir.
name Gereklidir. Bu dış başvurunun adı. Daha fazla bilgi için bkz. bildirilmemiş öğe adları.
Lib Gereklidir. LibDış yordam içeren dış dosyayı (dll veya kod kaynağı) tanımlayan bir yan tümce tanıtır.
libname Gereklidir. Belirtilen yordamı içeren dosyanın adı.
Alias İsteğe bağlı. Tanımlanmakta olan yordamın, içinde belirtilen ad ile dosyasında belirlenemediğini belirtir name . Kimliğini ' de belirtin aliasname .
aliasname AliasAnahtar sözcüğünü kullanmanız gerekir. İki şekilde yordamı tanımlayan dize:

İçindeki yordamın, tırnak işaretleri () içinde giriş noktası adı ""

-veya-

Bir sayı işareti ( # ), ardından yordamın giriş noktasının dosya içindeki sıra sayısını belirten bir tamsayı
parameterlist Yordam parametreleri alırsa gereklidir. Bkz. parametre listesi.
returntype FunctionBelirtilmişse ve Option Strict ise gereklidir On . Yordamın döndürdüğü değerin veri türü.

Açıklamalar

Bazen, bir dosyada (örneğin, bir DLL veya kod kaynağı gibi) tanımlanan bir yordamı projenizin dışında çağırmanız gerekir. bunu yaptığınızda, Visual Basic derleyicisinin yordamın nerede olduğu, nasıl tanımlandığı, arama sırası ve dönüş türü ve kullandığı dize karakter kümesi gibi yordamı çağırması için gereken bilgilere erişimi yoktur. İfade, bir Declare dış yordama bir başvuru oluşturur ve bu gerekli bilgileri sağlar.

DeclareYalnızca modül düzeyinde kullanabilirsiniz. Bu, bir dış başvurunun bildirim bağlamının bir sınıf, yapı veya modül olması ve kaynak dosya, ad alanı, arabirim, yordam veya blok olması 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şime sahiptir. Erişim değiştiricilerini kullanarak erişim düzeylerini ayarlayabilirsiniz.

Kurallar

  • Özelliklerine. Öznitelikleri bir dış başvuruya uygulayabilirsiniz. Uyguladığınız herhangi bir öznitelik, dış dosyada değil yalnızca projenizde etkilidir.

  • İlerine. Dış yordamlar örtük olarak paylaşılır. SharedDış başvuru bildirirken anahtar sözcüğünü kullanamaz ve paylaşılan durumunu değiştiremezsiniz.

    Dış yordam, geçersiz kılma, arabirim üyeleri uygulama veya olayları işleme alanına katılamaz. Buna uygun olarak,,,,, Overrides Overridable NotOverridable MustOverride Implements veya Handles anahtar sözcüğünü bir Declare bildirimde kullanamazsınız.

  • Dış yordam adı. Bu dış başvuruya, name kendi dış dosyası () içinde yordamın giriş noktası adı ile aynı adı (içinde) vermeniz gerekmez aliasname . AliasGiriş noktası adını belirtmek için bir yan tümce kullanabilirsiniz. bu, dış yordamın Visual Basic ayrılmış değiştirici veya bir değişken, yordam veya aynı kapsamda başka bir programlama öğesiyle aynı ada sahipse yararlı olabilir.

    Not

    Çoğu dll 'deki giriş noktası adları büyük/küçük harfe duyarlıdır.

  • Dış yordam numarası. Alternatif olarak, Alias dış dosyanın dışarı aktarma tablosundaki giriş noktasının sıra sayısını belirtmek için bir yan tümce kullanabilirsiniz. Bunu yapmak için aliasname bir sayı işaretiyle ( # ) başlarsınız. bu, dış yordam adındaki herhangi bir karaktere Visual Basic izin verilmiyorsa veya dış dosya yordamı bir ad olmadan dışarı aktardığında yararlı olabilir.

Veri türü kuralları

  • Parametre veri türleri. Option Strictİse On , içindeki her parametrenin veri türünü belirtmeniz gerekir parameterlist . Bu, herhangi bir veri türü veya bir numaralandırma, yapı, sınıf veya arabirimin adı olabilir. İçinde parameterlist , As her parametreye geçirilecek bağımsız değişkenin veri türünü belirtmek için bir yan tümce kullanırsınız.

    Not

    dış yordam .NET Framework için yazılmadığından, veri türlerinin karşılık geldiği konusunda dikkatli olmanız gerekir. örneğin, bir parametre ile bir Visual Basic 6,0 yordamına dış başvuru bildirirseniz Integer (Visual Basic 6,0 ' de 16 bit), Short Declare bu, Visual Basic 16 bit tamsayı türü olduğundan, karşılık gelen bağımsız değişkeni deyimde olduğu gibi tanımlamalısınız. benzer şekilde, Long Visual Basic 6,0 ' de farklı bir veri genişliğine sahiptir ve Date farklı şekilde uygulanır.

  • Dönüş veri türü. Dış yordam bir ve ise, Function Option Strict On çağırma koduna döndürülen değerin veri türünü belirtmeniz gerekir. Bu, herhangi bir veri türü veya bir numaralandırma, yapı, sınıf veya arabirimin adı olabilir.

    Not

    Visual Basic derleyicisi, veri türlerinizin dış yordamla uyumlu olduğunu doğrulamaz. Bir uyuşmazlık varsa, ortak dil çalışma zamanı çalışma zamanında bir MarshalDirectiveException özel durum oluşturur.

  • Varsayılan veri türleri. Option Strictise Off ve ' de bir parametrenin veri türünü belirtmezseniz parameterlist , Visual Basic derleyici karşılık gelen bağımsız değişkeni nesne veri türünedönüştürür. Benzer şekilde, belirtmezseniz returntype , derleyici döndürülen veri türünü de alır Object .

    Not

    Farklı bir platformda yazılmış olabilecek bir dış yordam ile ilgilenirken, veri türleri hakkında varsayımlar yapmak veya bunların varsayılan olmasına izin vermek tehlikeli olabilir. 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ı veya modül genelinde kapsamdadır.

  • Süre. Dış başvuru, bildirildiği sınıf, yapı veya modülle aynı yaşam süresine sahiptir.

  • Dış yordam çağırma. Bir ya da yordamını, bir değer döndürürse ya da bir Function Sub değer döndürmezse bir Call deyiminde belirterek kullanarak bir veya yordamı çağıran şekilde bir dış yordam çağırmanız gerekir.

    Bağımsız değişkenleri, bildiriminde tarafından belirtilen şekilde dış yordama geçirebilirsiniz parameterlist Declare . Parametrelerin dış dosyada ilk olarak nasıl bildirildiği dikkate alma. Benzer şekilde, bir dönüş değeri varsa, tam olarak ifadesinde belirtilen şekilde kullanın returntype Declare .

  • Karakter kümeleri. charsetmodifierdış yordamı çağırdığında Visual Basic dizelerin nasıl sıralaması gerektiğini belirtebilirsiniz. Ansideğiştirici, tüm dizeleri ansı değerlerine göre sıralamak için Visual Basic yönlendirir ve Unicode değiştirici onu tüm dizeleri Unicode değerlerine göre sıralamak için yönlendirir. Autodeğiştirici, dış başvuruya göre .NET Framework kurallarına göre veya belirtilmişse dizeleri sıralama Visual Basic yönlendirir name aliasname . Ansi varsayılan değerdir.

    charsetmodifierayrıca, Visual Basic dış yordamın dış dosyası içinde nasıl araması gerektiğini de belirtir. Ansi``Unicodeayrıca, arama sırasında adını değiştirmeden bunu aramak için doğrudan Visual Basic. Autoçalışma zamanı platformunun temel karakter kümesini belirlemede Visual Basic yönlendirir ve büyük olasılıkla dış yordam adını şu şekilde değiştirebilir:

    • Windows gibi bir Unicode platformunda, önce ad değişikliği yapmadan dış yordama bakın. Başarısız olursa, dış yordam adının sonuna "W" ekleyin ve tekrar arama yapın.

    • Bir ANSI platformunda, önce ad değişikliğine sahip olmayan dış yordama bakmanız gerekir. Başarısız olursa, dış yordam adının sonuna "A" ekleyin ve tekrar arama yapın.

  • Mekanizmadır. Visual Basic, dış yordamları çözümlemek ve erişmek için .NET Framework platform çağırma (pınvoke) mekanizmasını kullanır. DeclareVe DllImportAttribute sınıfı bu mekanizmayı otomatik olarak kullanır ve herhangi bir PInvoke bilgisine ihtiyacınız yoktur. daha fazla bilgi için bkz. izlenecek yol: Windows apı 'leri çağırma.

Önemli

Dış yordam ortak dil çalışma zamanının (CLR) dışında çalışırsa, bu, yönetilmeyen bir koddur. örneğin, bir Windows apı işlevi veya bir COM yöntemi gibi bir yordamı çağırdığınızda, uygulamanızı güvenlik risklerine maruz kalabilirsiniz. Daha fazla bilgi için bkz. yönetilmeyen kod Için güvenli kodlama yönergeleri.

Örnek 1

Aşağıdaki örnek, Function geçerli kullanıcı adını döndüren bir yordamın dış başvurusunu bildirir. Ardından, GetUserNameA yordamın bir parçası olarak dış yordamı çağırır getUser .

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 koddaki işlevleri kullanmanın alternatif bir yolunu sağlar. Aşağıdaki örnek, bir ifade kullanmadan içeri aktarılan bir işlevi bildirir Declare .

' 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.