Instruktaż: Wywoływanie interfejsów API systemu Windows (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 Używające funkcji DLL niezarządzany.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 danym komputerze mogą być używane inne nazwy lub lokalizacje pewnych elementów interfejsu użytkownika programu Visual Studio, które są używane w poniższych instrukcjach. Używana wersja programu Visual Studio oraz jej ustawienia określają te elementy. Aby uzyskać więcej informacji, zobacz Visual Studio, ustawienia.
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
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.
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.
Wybierz Aplikacji Windows z listy Visual Basic szablonów projektu.Zostanie wyświetlony nowy projekt.
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
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.
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
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
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.
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
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 Kierowanie międzyoperacyjne.
Aby użyć Declare i MarshalAs w wywołanie API
Określić nazwę funkcji do wywołania plus jej argumentów, typy danych i zwracają wartość.
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
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
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.
Wybierz Aplikacji Windows z listy Visual Basic szablonów projektu.Zostanie wyświetlony nowy projekt.
Dodawanie przycisku o nazwie Button2 do formularza startowego.
Kliknij dwukrotnie Button2 otworzyć widok kodu dla formularza.
Aby uprościć dostęp do DllImport, dodać Imports instrukcji do góry kod klasy formularza uruchamiania:
Imports System.Runtime.InteropServices
Zadeklarować funkcję pusty poprzedniego End Class instrukcji dla formularza i nazwa funkcji MoveFile.
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.
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
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
Utwórz plik o nazwie Test.txt i umieścić w katalogu C:\Tmp, na dysku twardym.Tworzenie katalogu Tmp, jeśli to konieczne.
Naciśnij klawisz F5, aby uruchomić aplikację.Pojawia się w formularzu głównym.
Kliknij przycisk Button2.Komunikat "plik został pomyślnie przeniesiony" jest wyświetlany, jeśli plik można przenosić.
Zobacz też
Informacje
Koncepcje
Tworzenie prototypów w kodzie zarządzanym.