Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Külső fájlban végrehajtott eljárásra mutató hivatkozást deklarál.
Szemantika
[ <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 ]
Részek
| Időszak | Definíció |
|---|---|
attributelist |
Opcionális. Lásd : Attribútumlista. |
accessmodifier |
Opcionális. A következők egyike lehet: - Nyilvános - Védett - Barát - Privát - Védett barát - Privát védelem Lásd a Visual Basic hozzáférési szintjeinek megtekintését. |
Shadows |
Opcionális. Lásd : Árnyékok. |
charsetmodifier |
Opcionális. Megadja a karakterkészletet és a fájlkeresési információkat. A következők egyike lehet: - Ansi (alapértelmezett) - Unicode - Kocsi |
Sub |
Nem kötelező, de vagy meg SubFunction kell jelennie. Azt jelzi, hogy a külső eljárás nem ad vissza értéket. |
Function |
Nem kötelező, de vagy meg SubFunction kell jelennie. Azt jelzi, hogy a külső eljárás egy értéket ad vissza. |
name |
Szükséges. A külső hivatkozás neve. További információ: Deklarált elemnevek. |
Lib |
Szükséges. Bevezet egy záradékot Lib , amely azonosítja a külső eljárást tartalmazó külső fájlt (DLL vagy kóderőforrás). |
libname |
Szükséges. A deklarált eljárást tartalmazó fájl neve. |
Alias |
Opcionális. Azt jelzi, hogy a deklarált eljárás nem azonosítható a fájlban namea megadott név alapján. Az azonosítót a következőben aliasnameadhatja meg: . |
aliasname |
A kulcsszó használata Alias esetén kötelező megadni. Az eljárást kétféleképpen azonosító sztring:Az eljárás belépési pontjának neve a fájlban, idézőjeleken belül ( "")-vagy- Számjel ( #) és egy egész szám, amely megadja az eljárás belépési pontjának sorszámát a fájlban |
parameterlist |
Akkor szükséges, ha az eljárás paramétereket vesz fel. Lásd : Paraméterlista. |
returntype |
Kötelező, ha Function meg van adva, és Option Strict az .On Az eljárás által visszaadott érték adattípusa. |
Megjegyzések
Előfordulhat, hogy a projekten kívüli fájlban (például DLL-ben vagy kóderőforrásban) meghatározott eljárást kell meghívnia. Ha ezt teszi, a Visual Basic fordító nem fér hozzá az eljárás helyes meghívásához szükséges információkhoz, például az eljárás helyét, az azonosítás módját, a hívássorozatot és a visszatérési típust, valamint az általa használt sztring karaktert. Az Declare utasítás egy külső eljárásra mutató hivatkozást hoz létre, és megadja ezeket a szükséges információkat.
Csak modulszinten használható Declare . Ez azt jelenti, hogy a külső hivatkozás deklarációs környezetének osztálynak, struktúrának vagy modulnak kell lennie, és nem lehet forrásfájl, névtér, interfész, eljárás vagy blokk. További információ: Deklarációs környezetek és alapértelmezett hozzáférési szintek.
A külső hivatkozások alapértelmezés szerint nyilvános hozzáférésre mutatnak. A hozzáférési szinteket a hozzáférési módosítókkal módosíthatja.
Szabályok
Attribútumok. Attribútumokat alkalmazhat külső hivatkozásra. Az alkalmazott attribútumok csak a projektben érvényesek, a külső fájlban nem.
Módosítók. A külső eljárások implicit módon meg vannak osztva. Külső hivatkozás deklarálásakor nem használhatja a
Sharedkulcsszót, és nem módosíthatja annak megosztott állapotát.A külső eljárások nem vehetnek részt a felülírásban, nem implementálhatók az interfésztagok, és nem kezelhetik az eseményeket. Ennek megfelelően nem használhatja a
Overrides,Overridable, ,NotOverridable,MustOverrideImplementsHandlesvagy kulcsszót egyDeclareutasításban.Külső eljárás neve. Ennek a külső hivatkozásnak nem kell ugyanazt a nevet (in
name) megadnia, mint az eljárás belépési pontjának neve a külső fájlban (aliasname). A belépési pont nevét záradékkalAliasadhatja meg. Ez akkor lehet hasznos, ha a külső eljárás neve megegyezik a Visual Basic fenntartott módosító nevével, vagy egy változó, eljárás vagy bármely más programozási elem ugyanabban a hatókörben.Megjegyzés:
A legtöbb DLL-ben a belépési pontok neve megkülönbözteti a kis- és nagybetűket.
Külső eljárásszám. Másik lehetőségként egy
Aliaszáradék használatával megadhatja a belépési pont sorszámát a külső fájl exportálási táblázatában. Ehhez egy számjellel (#) kell kezdeniealiasname. Ez akkor lehet hasznos, ha a külső eljárásnév egyik karaktere sem engedélyezett a Visual Basicben, vagy ha a külső fájl név nélkül exportálja az eljárást.
Adattípus-szabályok
Paraméter adattípusai. Ha
Option StrictigenOn, meg kell adnia az egyes paraméterek adattípusát a következőbenparameterlist: . Ez lehet bármilyen adattípus, vagy egy enumerálás, struktúra, osztály vagy felület neve. Ezen belülparameterlistegyAszáradék használatával adja meg az egyes paramétereknek átadni kívánt argumentum adattípusát.Megjegyzés:
Ha a külső eljárás nem a .NET-keretrendszerhez lett megírva, gondoskodnia kell arról, hogy az adattípusok megfeleljenek. Ha például külső hivatkozást deklarál egy Visual Basic 6.0-eljárásra egy
Integerparaméterrel (16 bit a Visual Basic 6.0-ban), akkor a megfelelő argumentumotShortaz utasításbanDeclarekell azonosítania, mivel ez a Visual Basic 16 bites egész típusa. Hasonlóképpen,Longa Visual Basic 6.0-ban eltérő adatszélességgel rendelkezik, ésDatemásképpen van implementálva.Adattípust ad vissza. Ha a külső eljárás egy
FunctionésOption StrictazOn, meg kell adnia a hívó kódnak visszaadott érték adattípusát. Ez lehet bármilyen adattípus, vagy egy enumerálás, struktúra, osztály vagy felület neve.Megjegyzés:
A Visual Basic fordító nem ellenőrzi, hogy az adattípusok kompatibilisek-e a külső eljáráséval. Ha eltérés van, a közös nyelvi futtatókörnyezet kivételt MarshalDirectiveException hoz létre futásidőben.
Alapértelmezett adattípusok. Ha
Option Strictigen,Offés nem adja meg egy paraméterparameterlistadattípusát, a Visual Basic fordító a megfelelő argumentumot objektum adattípussá alakítja. Hasonlóképpen, ha nem adja megreturntype, a fordító a visszatérési adattípustObjectveszi alapul.Megjegyzés:
Mivel olyan külső eljárásokkal foglalkozik, amelyeket esetleg egy másik platformon írtak, veszélyes az adattípusokra vonatkozó feltételezések készítése vagy az alapértelmezett beállítások engedélyezése. Sokkal biztonságosabb minden paraméter és a visszatérési érték adattípusát megadni, ha van ilyen. Ez a kód olvashatóságát is javítja.
Magatartás
Hatókör A külső hivatkozás az osztály, a struktúra vagy a modul hatókörében van.
Élettartam. A külső hivatkozás élettartama megegyezik azzal az osztálysal, struktúrával vagy modullal, amelyben deklarálva van.
Külső eljárás meghívása. A külső eljárásokat ugyanúgy hívhatja meg, mint egy
FunctioneljárástSub– ha egy kifejezést használ, ha értéket ad vissza, vagy ha nem ad vissza értéket, a hívási utasításban adja meg.Az argumentumokat pontosan az utasításban
parameterlistmegadott módon adja át aDeclarekülső eljárásnak. Ne vegye figyelembe, hogy a paraméterek eredetileg hogyan lettek deklarálva a külső fájlban. Hasonlóképpen, ha van visszatérési érték, használja pontosan az utasításbanreturntypeDeclaremegadott módon.Karakterkészleteket. Megadhatja,
charsetmodifierhogy a Visual Basic hogyan alkalmazza a sztringeket, amikor meghívja a külső eljárást. AAnsimódosító az összes sztring ANSI-értékekre való marshalálására irányítja a Visual Basicet, aUnicodemódosító pedig az összes sztringEt Unicode-értékekre irányítja. AAutomódosító a Visual Basicet irányítja a .NET-keretrendszer szabályainak megfelelő, a külső hivatkozásnamealapján vagyaliasnameha meg van adva. Az alapértelmezett érték aAnsi.charsetmodifierazt is meghatározza, hogy a Visual Basic hogyan keresse meg a külső eljárást a külső fájlban.AnsiésUnicodemindkettő a Visual Basicet arra utasítja, hogy a keresés során ne módosítsa a nevét.AutoA Visual Basic irányítja a futtató platform alapkaraktere meghatározására, és esetleg módosítja a külső eljárás nevét az alábbiak szerint:Egy Unicode-platformon, például a Windowson először névmódosítás nélkül keresse meg a külső eljárást. Ha ez nem sikerül, fűzze hozzá a "W" elemet a külső eljárásnév végéhez, és keresse meg újra.
Egy ANSI-platformon először névmódosítás nélkül keresse meg a külső eljárást. Ha ez nem sikerül, fűzze hozzá az "A" elemet a külső eljárásnév végéhez, és keresse meg újra.
Mechanizmus. A Visual Basic a .NET-keretrendszer platformhívási (PInvoke) mechanizmusával oldja meg és éri el a külső eljárásokat. Az
Declareutasítás és az osztály is automatikusan használja ezt a DllImportAttribute mechanizmust, és nincs szükség a PInvoke ismeretére. További információ : Útmutató: Windows API-k meghívása.
Fontos
Ha a külső eljárás a közös nyelvi futtatókörnyezeten (CLR) kívül fut, az nem felügyelt kód. Ha ilyen eljárást hív meg, például Windows API-függvényt vagy COM-metódust, biztonsági kockázatoknak teheti ki az alkalmazást. További információ: Biztonságos kódolási irányelvek a nem felügyelt kódhoz.
1. példa
Az alábbi példa egy olyan eljárás külső hivatkozását Function deklarálja, amely az aktuális felhasználónevet adja vissza. Ezután meghívja a külső eljárást GetUserNameA az getUser eljárás részeként.
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
2. példa
Ez DllImportAttribute alternatív módot kínál a függvények nem felügyelt kódban való használatára. Az alábbi példa egy importált függvényt deklarál utasítás nélkül 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