Udostępnij za pośrednictwem


Stwierdzenie instrukcji

Deklaruje odniesienie do procedury wdrożone w zewnętrznym pliku.

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

Części

Termin

Definicja

attributelist

Opcjonalne.Zobacz listy atrybutów.

accessmodifier

Opcjonalne.Może mieć jedną z następujących czynności:

See Poziomy dostępu w programie Visual Basic.

Shadows

Opcjonalne.Zobacz cienie.

charsetmodifier

Opcjonalne.Określa zestaw znaków i plik wyszukiwania informacji.Może mieć jedną z następujących czynności:

Sub

Opcjonalne, ale albo Sub lub Function musi znajdować się.Wskazuje procedury zewnętrznego nie zwraca wartości.

Function

Opcjonalne, ale albo Sub lub Function musi znajdować się.Wskazuje, że procedury zewnętrznego zwraca wartość.

name

Wymagane.Nazwa tego odwołania zewnętrzne.Aby uzyskać więcej informacji, zobacz Nazwy elementów deklarowanej (Visual Basic).

Lib

Wymagane.Wprowadza Lib klauzuli, która identyfikuje pliku zewnętrznego (biblioteki DLL lub zasobu kodów), który zawiera procedury zewnętrznego.

libname

Wymagane.Nazwa pliku, który zawiera zadeklarowanej procedury.

Alias

Opcjonalne.Wskazuje procedury deklarowania nie można zidentyfikować w jego pliku przez nazwę określoną w name.Określ jej identyfikacji, w aliasname.

aliasname

Wymagane w przypadku użycia Alias słowa kluczowego.Ciąg, który identyfikuje procedury w jeden z dwóch sposobów:

Nazwa punktu wejścia procedury w ramach jego plik, w ramach oferty ("")

- lub -

Znak numeru (#) następuje całkowitą określającą liczbę porządkową punktu wejścia procedury w ramach jego pliku

parameterlist

Wymagane, jeśli procedura pobiera parametry.See Lista parametrów (Visual Basic).

returntype

Wymagany, jeżeli Function jest określony i Option Strict jest On.Typ danych wartości zwróconej przez procedurę.

Uwagi

Czasami trzeba wywołać procedurę zdefiniowane w pliku (takich jak biblioteki DLL lub zasobu kodów) poza projektem.Po wykonaniu tej czynności, kompilator języka Visual Basic nie ma dostępu do informacji wymaganych do wywołania procedury poprawnie, takich jak, gdzie znajduje się procedura, w jaki sposób jest identyfikowany, jego sekwencja wywoływania i zwracany typ i zestaw znaków ciągu, który używa.Declare Instrukcji tworzy odwołanie do procedury zewnętrznego i dostaw tego niezbędne informacje.

Można użyć Declare tylko na poziomie modułu.Oznacza to, kontekście deklaracji odwołanie zewnętrzne muszą być klasy, struktury lub moduł i nie może być plik źródłowy, obszar nazw, interfejs, procedury lub bloku.Aby uzyskać więcej informacji, zobacz Konteksty deklaracji i poziomy dostępu domyślne (Visual Basic).

Domyślnie odwołuje się do zewnętrznych Publicznego (Visual Basic) dostępu.Można dostosować ich poziomy dostępu z modyfikatorów dostępu.

Zasady

  • Atrybuty. Atrybuty mogą dotyczyć odwołanie zewnętrzne.Każdy atrybut, który można zastosować ma wpływ tylko w projekcie, a nie w pliku zewnętrznego.

  • Modyfikatory. Procedury zewnętrznego są niejawnie Udostępnione (Visual Basic).Nie można użyć Shared słowa kluczowego podczas deklarowania odwołaniem zewnętrznym, a nie można zmienić jego stan udostępnionego.

    Procedury zewnętrznego nie może uczestniczyć w przesłanianie, implementują członków interfejsu lub obsługi zdarzeń.Accordingly, you cannot use the Overrides, Overridable, NotOverridable, MustOverride, Implements, or Handles keyword in a Declare statement.

  • Nazwa procedury zewnętrznego. Nie trzeba podać odniesienie zewnętrzne z tej samej nazwie (w name) jako nazwy punktu wejścia procedury, w ramach jego pliku zewnętrznego (aliasname).Można użyć Alias klauzuli, aby określić nazwę punktu wejścia.Może to być przydatne, jeśli procedury zewnętrznego ma taką samą nazwę jak modyfikator zarezerwowane języka Visual Basic lub zmiennej, procedury lub inny element programowania w tym samym zasięgu.

    [!UWAGA]

    Punkt wejścia nazw w większości biblioteki DLL jest rozróżniana wielkość liter.

  • Zewnętrzny numer procedury. Alternatywnie, można użyć Alias klauzuli, aby określić liczbę porządkową punkt wejścia tabeli wywóz z pliku zewnętrznego.Aby to zrobić, możesz rozpocząć aliasname z znak numeru (#).Może to być przydatne, jeśli dowolny znak w nazwie procedury zewnętrznego nie jest dozwolone w języku Visual Basic lub zewnętrznego pliku eksportu procedury bez nazwy.

Reguły typu danych

  • Typy danych parametrów. Jeśli Option Strict jest On, należy określić typ danych każdego parametru w parameterlist.Może to być dowolny typ danych lub nazwę wyliczenia, struktury, klasy lub interfejsu.W ramach parameterlist, za pomocą As klauzuli, aby określić typ danych argumentów, które mają być przekazywane do każdego parametru.

    [!UWAGA]

    Jeżeli procedura zewnętrznego nie został napisany dla.NET Framework, należy uważać by odpowiadały typów danych.Na przykład zadeklarować zewnętrznym odwołaniem do procedury języka Visual Basic 6.0 z Integer parametr (16 bitów w języku Visual Basic 6.0), należy określić odpowiednie argumenty jako Short w Declare instrukcji, ponieważ jest to typ 16-bitowe liczby całkowite w języku Visual Basic.Podobnie Long ma szerokość różnych danych w programie Visual Basic 6.0 i Date jest zaimplementowana w różny sposób.

  • Zwraca typ danych. Jeżeli procedura zewnętrznego jest Function i Option Strict jest On, należy określić typ danych wartości zwracanej do kodu wywołującego.Może to być dowolny typ danych lub nazwę wyliczenia, struktury, klasy lub interfejsu.

    [!UWAGA]

    Kompilator Visual Basic nie weryfikuje, że Twoje typy danych są zgodne z tymi procedury zewnętrznego.Jeśli istnieje niezgodność, common language runtime generuje MarshalDirectiveException wyjątek w czasie wykonywania.

  • Domyślne typy danych. Jeśli Option Strict jest Off i nie zostanie określony typ danych parametru w parameterlist, kompilator języka Visual Basic Konwertuje argument odpowiednich Typ danych Object.Podobnie jeśli nie określisz returntype, kompilator ma typ zwracanych danych za Object.

    [!UWAGA]

    Ponieważ mamy do czynienia z procedury zewnętrznego, która może być zapisywana na innej platformie, jest niebezpieczne, przyjmuje żadnych założeń dotyczących typów danych lub pozwolić im na wartość domyślną.Jest znacznie bezpieczniejsze określić typ danych każdego parametru i wartości zwracanej, jeśli istnieje.Zwiększa to czytelność kodu.

Zachowanie

  • Zakres. Odwołanie zewnętrzne jest w zasięgu całej swojej klasy, struktury lub moduł.

  • Okres istnienia. Odwołanie zewnętrzne ma ten sam okres istnienia jako klasy, struktury lub moduł, w którym jest on zadeklarowany jako.

  • Wywołanie procedury zewnętrznego. Wywołanie procedury zewnętrznego taki sam sposób, należy wywołać Function lub Sub procedury — za pomocą w wyrażeniu jeżeli zwróci wartość lub podając je w Instrukcji Call (Visual Basic) , jeśli nie zwraca wartości.

    Przekazywać argumenty do procedury zewnętrznego dokładnie określone przez parameterlist w Declare instrukcji.Nie brać pod uwagę jak parametry zostały pierwotnie zgłoszone w pliku zewnętrznego.Podobnie, w przypadku wartości zwracanej, użyj go dokładnie określone przez returntype w Declare instrukcji.

  • Zestawy znaków. Można określić w charsetmodifier jak Visual Basic należy zorganizować ciągi wywołuje procedury zewnętrznego.Ansi Modyfikator kieruje Visual Basic w celu zorganizowania wszystkie ciągi do wartości ANSI i Unicode modyfikator kieruje go do zorganizowania wszystkie ciągi do wartości Unicode.Auto Modyfikator kieruje języka Visual Basic do ciągów MARSZAŁEK zgodnie z.NET Framework zasady, na podstawie odwołania zewnętrznego name, lub aliasname , jeśli określony.Wartością domyślną jest Ansi.

    charsetmodifierOkreśla również, jak Visual Basic powinna wyglądać zewnętrznych procedurę, w ramach jego pliku zewnętrznego.Ansii Unicode zarówno bezpośrednie języka Visual Basic, aby wyszukać bez zmiany jego nazwy podczas wyszukiwania.Autokieruje języka Visual Basic, aby określić zestaw podstawowy znaków platformy run-time i ewentualnie zmodyfikuj nazwę procedury zewnętrznego w następujący sposób:

    • Na platformie ANSI, takich jak Windows 95, Windows 98 lub Windows Millennium Edition najpierw sprawdzić procedury zewnętrznego bez wprowadzania zmian nazwy.Jeśli się nie powiedzie, Dołącz "A" na końcu nazwy procedury zewnętrznego i wyszukiwać go ponownie.

    • Na platformie Unicode, takich jak Windows NT, Windows 2000 lub Windows XP najpierw sprawdzić procedury zewnętrznego bez wprowadzania zmian nazwy.W przypadku niepowodzenia, należy dołączyć nazwę "W" na końcu procedury zewnętrznego i wyszukiwać go ponownie.

  • Mechanizm. Używa języka Visual Basic.NET Framework wywołać platformy (PInvoke) mechanizmu rozwiązywania i procedury zewnętrznego dostępu.Declare Instrukcji i DllImportAttribute klasy zarówno automatycznie używać tego mechanizmu, i nie ma potrzeby wszelkich wiedzy PInvoke.Aby uzyskać więcej informacji, zobacz Instruktaż: Wywoływanie interfejsów API systemu Windows (Visual Basic).

Uwaga dotycząca zabezpieczeńUwaga dotycząca zabezpieczeń

Uruchomienie procedury zewnętrznego poza common language runtime (CLR) jest kodu niezarządzanego.Przy wywoływaniu takiej procedury, na przykład funkcji Win32 API lub metody COM, może narazić na ryzyko naruszenia zabezpieczeń aplikacji.Aby uzyskać więcej informacji, zobacz Kod niezarządzany.

Przykład

Poniższy przykład deklaruje zewnętrznym odwołaniem do Function procedura, która zwraca nazwę bieżącego użytkownika.Następnie wywołuje procedury zewnętrznego GetUserNameA jako część getUser procedury.

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

DllImportAttribute Oferuje alternatywny sposób używania funkcji w kodu niezarządzanego.Poniższy przykład deklaruje importowanej funkcji bez korzystania z Declare instrukcji.

' 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

Zobacz też

Zadania

Instruktaż: Wywoływanie interfejsów API systemu Windows (Visual Basic)

Informacje

Przywóz instrukcji (.Obszar nazw netto i typ)

Operator AddressOf (Visual Basic)

Instrukcji funkcyjnej (Visual Basic)

Instrukcja Sub (Visual Basic)

Lista parametrów (Visual Basic)

Instrukcji Call (Visual Basic)

LastDllError