Udostępnij za pośrednictwem


Wskazówki: wywoływanie Windows API (Visual Basic)

Interfejsy API systemu Windows są bibliotek dołączanych (dynamicznie dll), które są częścią systemu operacyjnego Windows.Służą one do wykonywania zadań, gdy trudno napisać równoważnych procedur własny.Na przykład, system Windows udostępnia funkcję o nazwie FlashWindowEx , pozwala na pasku tytułu dla aplikacji alternatywnej między jasnymi i ciemnymi odcieni.

Zaletą używania interfejsów API systemu Windows w kodzie jest, że mogą zaoszczędzić czas rozwoju, ponieważ zawierają dziesiątki przydatne funkcje, które są już zapisane i oczekiwania ma być używany.Wadą jest to, że mogą być trudne do pracy z i unforgiving, gdy wystąpią interfejsów API systemu Windows.

Windows API reprezentują kategorii specjalnej interoperacyjności.Windows API nie należy używać kodu zarządzanego, nie mają wbudowane bibliotek typów i używać typów danych, które są inne niż te, które są używane z programem Visual Studio.Ze względu na te różnice i ponieważ interfejsów API systemu Windows nie są obiektami COM, współdziałanie z interfejsów API systemu Windows i .NET Framework jest wykonywane przy użyciu platformy wywołać lub PInvoke.Wywołać platformy jest usługą, że umożliwia zarządzany kod do wywoływania niezarządzanego funkcje realizowane w bibliotekach DLL.Aby uzyskać więcej informacji, zobacz Wykorzystywanie niezarządzanych funkcji DLL.Można użyć funkcji PInvoke w Visual Basic przy użyciu Declare instrukcji lub stosowania DllImport atrybutu procedurze puste.

Wywołania interfejsu API systemu Windows zostały ważną częścią Visual Basic Programowanie w przeszłości, lecz są rzadko konieczne z Visual Basic 2005.W każdym przypadku, gdy jest to możliwe, należy używać kodu zarządzanego z .NET Framework do wykonywania zadań, zamiast wywołania interfejsu API systemu Windows.W tym instruktażu znajdują się informacje o tych sytuacji, w których za pomocą interfejsów API systemu Windows jest to konieczne.

[!UWAGA]

Na komputerze w poniższych instrukcjach mogą być wyświetlane inne nazwy i lokalizacje niektórych elementów interfejsu użytkownika programu Visual Studio. Te elementy są określane przez numer wersji Visual Studio oraz twoje ustawienia. Aby uzyskać więcej informacji, zobacz Dostosowywanie ustawień środowiska deweloperskiego w Visual Studio.

Zadeklarować za pomocą wywołania interfejsu API

Najbardziej powszechnym sposobem wywołania API systemu Windows jest za pomocą Declare instrukcji.

Aby zadeklarować procedury biblioteki DLL

  1. Określić nazwę funkcji, którą chcesz się połączyć, plus jej argumentów, typy argumentów i zwraca wartość, jak również nazwę i lokalizację biblioteki DLL, który go zawiera.

    [!UWAGA]

    Pełne informacje na temat interfejsów API systemu Windows na ten temat można znaleźć w dokumentacji Win32 SDK API Windows SDK platformy.Aby uzyskać więcej informacji o stałych, które korzystają z interfejsów API systemu Windows należy zbadać pliki nagłówków, takie jak Windows.h dołączone do zestawu Platform SDK.

  2. Otwórz nowy projekt aplikacji systemu Windows, klikając Nowy na pliku menu, a następnie klikając polecenie Projekt.Nowy projekt pojawi się okno dialogowe.

  3. Wybierz Aplikacji Windows z listy Visual Basic szablonów projektu.Zostanie wyświetlony nowy projekt.

  4. Dodaje się Declare działać albo do klasy lub moduł, w którym chcesz użyć biblioteki DLL:

    Declare Auto Function MBox Lib "user32.dll" Alias "MessageBox" (
        ByVal hWnd As Integer,
        ByVal txt As String,
        ByVal caption As String,
        ByVal Typ As Integer) As Integer
    

Części zadeklarować instrukcji

Declare Instrukcja zawiera następujące elementy.

Auto, modyfikator

Auto Modyfikator nakazuje runtime, aby przekonwertować ciąg na podstawie nazwy metody, zgodnie ze wspólnymi regułami środowiska wykonawczego języka (lub nazwa aliasu, jeśli określony).

Słowa kluczowe lib i Alias

Następujące nazwy Function słowo kluczowe jest to nazwa, program korzysta z dostępu do funkcji przywożonych.Może być taki sam, jak prawdziwej nazwy funkcji, który wywołujesz lub można użyć wszelkie procedury prawidłową nazwę i następnie zatrudniają Alias słowo kluczowe, aby określić prawdziwej nazwy funkcji, który wywołujesz.

Określ Lib słowa kluczowego, a po nim nazwę i lokalizację biblioteki DLL, która zawiera funkcję dzwonisz.Nie trzeba określić ścieżkę do plików znajdujących się w katalogach systemu Windows.

Użyj Alias słowa kluczowego, jeżeli nie jest prawidłową nazwę funkcji, który wywołujesz Visual Basic Nazwa procedury lub w konflikcie z nazwą innych elementów w aplikacji.Aliaswskazuje nazwę true wywoływanej funkcji.

Argument i deklaracje typu danych

Stwierdzenie, argumenty i ich typy danych.Ta część może trudne, ponieważ typy danych używanych w systemie Windows nie odpowiadają na typy danych programu Visual Studio.Visual Basicrobi dużo pracy konwertując argumenty zgodne typy danych, w procesie zwanym kierowanie.Jawnie kontroli, jak argumenty są organizowane przy użyciu MarshalAsAttribute atrybut zdefiniowane w System.Runtime.InteropServices obszaru nazw.

[!UWAGA]

Poprzednie wersje Visual Basic dopuszcza deklarowanie parametrów As Any, co oznacza danych wszelkich danych typu może być używane.Visual Basicwymaga to użycia określony typ danych dla wszystkich Declare instrukcji.

Stałe interfejs API systemu Windows

Niektóre argumenty są kombinacje stałych.Na przykład MessageBox przedstawione w niniejszym instruktażu interfejsu API akceptuje argument liczby całkowitej, o nazwie Typ , kontroluje, w jaki sposób zostanie wyświetlone okno komunikatu.Można określić wartość liczbową z tych stałych, sprawdzając #define oświadczeń zawartych w pliku pliku WinUser.h.Wartości numeryczne są zasadniczo wykazywane w formacie szesnastkowym, więc możesz dodać je i przekonwertować na postać dziesiętną za pomocą kalkulatora.Na przykład, jeśli zachodzi potrzeba połączenia stałe dla stylu wykrzyknik MB_ICONEXCLAMATION 0x00000030 i tak/nie styl MB_YESNO 0x00000004, można dodać numery i uzyskać wynik 0x00000034 lub 52 dziesiętnej.Mimo że wynik dziesiętnego można użyć bezpośrednio, jest lepiej jest zadeklarować te wartości jako stałe w aplikacji i łączyć je za pomocą Or operatora.

Aby zadeklarować stałych dla wywołania interfejsu API systemu Windows

  1. Zajrzyj do dokumentacji funkcji systemu Windows, który wywołujesz.Określa nazwę stałych, których używa i nazwę pliku .h zawierający wartości liczbowe dla tych stałych.

  2. Użyj edytora tekstów, takiego jak Notatnik, aby wyświetlić zawartość pliku nagłówka (.h) i znaleźć wartości skojarzone z stałych, którego używasz.Na przykład MessageBox API używa stałej MB_ICONQUESTION do pokazania znaku zapytania w oknie komunikatu.Definicja MB_ICONQUESTION w pliku WinUser.h i pojawia się w następujący sposób:

    #define MB_ICONQUESTION 0x00000020L

  3. Dodaj równoważne Const sprawozdania do klasy lub moduł, aby udostępnić te stałe do aplikacji.Na przykład:

    Const MB_ICONQUESTION As Integer = &H20
    Const MB_YESNO As Integer = &H4
    Const IDYES As Integer = 6
    Const IDNO As Integer = 7
    

Aby wywołać procedurę biblioteki DLL

  1. Dodawanie przycisku o nazwie Button1 do uruchamiania formularza dla projektu, a następnie kliknij dwukrotnie go, aby obejrzeć jego kod.Obsługa zdarzenia przycisku jest wyświetlany.

  2. Dodawanie kodu do Click obsługi zdarzeń dla przycisku dodane, aby wywołać procedurę i zapewniają odpowiednie argumenty:

    Private Sub Button1_Click(ByVal sender As System.Object,
        ByVal e As System.EventArgs) Handles Button1.Click
    
        ' Stores the return value. 
        Dim RetVal As Integer
        RetVal = MBox(0, "Declare DLL Test", "Windows API MessageBox",
            MB_ICONQUESTION Or MB_YESNO)
    
        ' Check the return value. 
        If RetVal = IDYES Then
            MsgBox("You chose Yes")
        Else
            MsgBox("You chose No")
        End If 
    End Sub
    
  3. Uruchom projekt, naciskając klawisz F5.Zostaje wyświetlone okno komunikatu z obu Tak i nr przyciski odpowiedzi.Kliknij jedną.

Kierowanie danych

Visual Basicautomatycznie konwertuje typy danych parametrów i wartości zwracane w przypadku wywołania interfejsu API systemu Windows, ale można użyć MarshalAs atrybut jawnie określić typy danych niezarządzanego oczekuje, że interfejs API.Aby uzyskać więcej informacji na temat współdziałania kierowanie zobacz Organizowanie międzyoperacyjne.

Aby użyć Declare i MarshalAs w wywołanie API

  1. Określić nazwę funkcji do wywołania plus jej argumentów, typy danych i zwracają wartość.

  2. Aby uprościć dostęp do MarshalAs atrybutu, należy dodać Imports instrukcji do górnej części kodu dla klasy lub moduł, jak w poniższym przykładzie:

    Imports System.Runtime.InteropServices
    
  3. Dodawanie prototyp funkcji dla funkcji przywożonych do klasy lub moduł, a stosuje się MarshalAs atrybutu do parametrów wyjściowych ani zwracanej wartości.W poniższym przykładzie wywołanie API, który oczekuje typu void* jest organizowane jako AsAny:

    Declare Sub SetData Lib "..\LIB\UnmgdLib.dll" (
        ByVal x As Short,
        <MarshalAsAttribute(UnmanagedType.AsAny)>
            ByVal o As Object)
    

Wywołania interfejsu API korzystające z elementu DllImport

DllImport Atrybut zawiera drugi sposób, aby wywoływać funkcje w bibliotekach DLL bez biblioteki typów.DllImportodpowiada w przybliżeniu do korzystania z Declare instrukcji, ale zapewnia większą kontrolę nad jak funkcje są wywoływane.

Można użyć DllImport z większości interfejsu API systemu Windows wymaga tak długo, jak wywołanie odwołuje się do udostępnionej (czasami nazywany statyczne) metoda.Nie można użyć metody, które wymagają instancji klasy.W odróżnieniu od Declare sprawozdań, DllImport nie mogą używać wywołania MarshalAs atrybut.

Wywołanie interfejsu API systemu Windows, używając atrybutu DllImport

  1. Otwórz nowy projekt aplikacji systemu Windows, klikając Nowy na pliku menu, a następnie klikając polecenie Projekt.Nowy projekt pojawi się okno dialogowe.

  2. Wybierz Aplikacji Windows z listy Visual Basic szablonów projektu.Zostanie wyświetlony nowy projekt.

  3. Dodawanie przycisku o nazwie Button2 do formularza startowego.

  4. Kliknij dwukrotnie Button2 otworzyć widok kodu dla formularza.

  5. Aby uprościć dostęp do DllImport, dodać Imports instrukcji do góry kod klasy formularza uruchamiania:

    Imports System.Runtime.InteropServices
    
  6. Zadeklarować funkcję pusty poprzedniego End Class instrukcji dla formularza i nazwa funkcji MoveFile.

  7. Stosuje się Public i Shared modyfikatorów do deklaracji funkcji i ustawianie parametrów dla MoveFile na podstawie argumentów, używa funkcji interfejsu API systemu Windows:

    Public Shared Function MoveFile(
        ByVal src As String,
        ByVal dst As String) As Boolean 
        ' Leave the body of the function empty. 
    End Function
    

    Funkcja może mieć dowolną nazwę prawidłowe procedury; DllImport atrybut określa nazwę w bibliotece DLL.Również obsługuje interoperacyjności kierowanie dla parametrów i wartości zwracane, więc można wybrać typy danych programu Visual Studio, które są podobne do danych typów używa interfejsu API.

  8. Stosuje się DllImport atrybutu do funkcji puste.Pierwszy parametr jest nazwę i lokalizację pliku DLL zawierającego funkcji, który wywołujesz.Nie trzeba określić ścieżkę do plików znajdujących się w katalogach systemu Windows.Drugi parametr jest nazwany argument, określający nazwę funkcji w interfejsie API systemu Windows.W tym przykładzie DllImport atrybut wymusza wywołania MoveFile przekazywane na MoveFileW w module KERNEL32.BIBLIOTEKA DLL.MoveFileW Metoda kopiuje ścieżkę pliku src do ścieżki dst.

    <DllImport("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 
        ' Leave the body of the function empty. 
    End Function
    
  9. Dodawanie kodu do Button2_Click obsługi zdarzeń, aby wywołać funkcję:

    Private Sub Button2_Click(ByVal sender As System.Object,
        ByVal e As System.EventArgs) Handles Button2.Click
    
        Dim RetVal As Boolean = MoveFile("c:\tmp\Test.txt", "c:\Test.txt")
        If RetVal = True Then
            MsgBox("The file was moved successfully.")
        Else
            MsgBox("The file could not be moved.")
        End If 
    End Sub
    
  10. Utwórz plik o nazwie Test.txt i umieścić w katalogu C:\Tmp, na dysku twardym.Tworzenie katalogu Tmp, jeśli to konieczne.

  11. Naciśnij klawisz F5, aby uruchomić aplikację.Pojawia się w formularzu głównym.

  12. Kliknij przycisk Button2.Komunikat "plik został pomyślnie przeniesiony" jest wyświetlany, jeśli plik można przenosić.

Zobacz też

Informacje

Declare — Instrukcja

DllImportAttribute

MarshalAsAttribute

Auto (Visual Basic)

Alias — Klauzula (Visual Basic)

Koncepcje

Tworzenie prototypów w kodzie zarządzanym

Przykład wywołania zwrotnego

Inne zasoby

COM Interop (Visual Basic)