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,,,,,
OverridesOverridableNotOverridableMustOverrideImplementsveyaHandlesanahtar sözcüğünü birDeclarebildirimde kullanamazsınız.Dış yordam adı. Bu dış başvuruya,
namekendi dış dosyası () içinde yordamın giriş noktası adı ile aynı adı (içinde) vermeniz gerekmezaliasname.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,
Aliasdış 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çinaliasnamebir 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İseOn, içindeki her parametrenin veri türünü belirtmeniz gerekirparameterlist. Bu, herhangi bir veri türü veya bir numaralandırma, yapı, sınıf veya arabirimin adı olabilir. İçindeparameterlist,Asher 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),ShortDeclarebu, 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,LongVisual Basic 6,0 ' de farklı bir veri genişliğine sahiptir veDatefarklı şekilde uygulanır.Dönüş veri türü. Dış yordam bir ve ise,
FunctionOption StrictOnç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 StrictiseOffve ' de bir parametrenin veri türünü belirtmezsenizparameterlist, Visual Basic derleyici karşılık gelen bağımsız değişkeni nesne veri türünedönüştürür. Benzer şekilde, belirtmezsenizreturntype, derleyici döndürülen veri türünü de alırObject.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
FunctionSubdeğ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
parameterlistDeclare. 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ınreturntypeDeclare.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 veUnicodedeğ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önlendirirnamealiasname.Ansivarsayı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