Sdílet prostřednictvím


Návod: Volání rozhraní API systému Windows (Visual Basic)

Rozhraní API systému Windows jsou dynamických knihoven (DLL), které jsou součástí operačního systému Windows.Je použít k provádění úkolů v případě, že je obtížné napsat rovnocenné postupy.Například systém Windows obsahuje funkci pojmenovanou FlashWindowEx , která umožňuje vytvořit alternativní mezi světlými a tmavými odstíny záhlaví aplikace.

Výhodou použití rozhraní API systému Windows v kódu je, že můžete ušetřit čas při vývoji, protože obsahují desítky užitečné funkce, které jsou již zapsány a čeká na použije.Nevýhodou je, že rozhraní API systému Windows může být obtížné pracovat s a nepřijímá v případě problémů.

Rozhraní API systému Windows představují zvláštní kategorie interoperability.Rozhraní API systému Windows nepoužívejte spravovaný kód, nemají vestavěné knihoven typů a použití datových typů, které jsou jiné než s Visual Studio.Z důvodu těchto rozdílů a protože rozhraní API systému Windows nejsou objekty COM, spolupráce s rozhraním API systému Windows a .NET Framework se provádí pomocí platformy vyvolat, nebo PInvoke.Volání funkce platformy je, že umožňuje spravovaný kód k volání nespravované funkcí, které jsou implementovány v knihovnách DLL služby.Další informace naleznete v tématu Používání nespravovaných funkcí DLL.Pomocí PInvoke v Visual Basic pomocí buď Declare prohlášení nebo použití DllImport atribut do procedury.

Volání rozhraní API systému Windows byla důležitou součástí Visual Basic programování v minulosti, ale jsou zřídka s Visual Basic 2005.Kdykoli je to možné, používejte ze spravovaného kódu .NET Framework k provádění úkolů namísto volání rozhraní API systému Windows.Tento návod obsahuje informace pro tyto situace, ve které pomocí rozhraní API systému Windows je nutné.

[!POZNÁMKA]

Na vašem počítači se můžou v následujících pokynech zobrazovat jiné názvy nebo umístění některých prvků uživatelského rozhraní Visual Studia. Tyto prvky jsou určeny edicí sady Visual Studio a použitým nastavením. Další informace najdete v tématu Přizpůsobení nastavení pro vývoj v sadě Visual Studio.

Deklarujete pomocí volání rozhraní API

Je nejběžnější způsob volání rozhraní API systému Windows pomocí Declare prohlášení.

Deklarovat proceduru knihovny DLL

  1. Určit název funkce, kterou chcete volat, a jeho argumenty, typ argumentu a vrátí hodnotu, jakož i název a umístění knihovny DLL, která jej obsahuje.

    [!POZNÁMKA]

    Úplné informace o rozhraní API systému Windows naleznete v dokumentaci sady Win32 SDK v rozhraní API Windows Platform SDK.Další informace o konstanty, které používají rozhraní API systému Windows zkontrolujte soubory záhlaví jako Windows.h zahrnuté v sadě Platform SDK.

  2. Otevřít nový projekt aplikace systému Windows klepnutím na Nový na soubor nabídce a klepnutím na projektu.Zobrazí se dialogové okno Nový projekt.

  3. Vyberte Aplikace systému Windows ze seznamu Visual Basic projektu šablony.Zobrazí se nový projekt.

  4. Přidejte následující Declare pracovat na třídu nebo modul, ve kterém chcete použít knihovnu 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
    

Částí deklarovat prohlášení

Declare Příkaz obsahuje následující prvky.

Modifikátor Auto

Auto Modifikátor pokyn runtime převést řetězec na základě metody název podle společných pravidel language runtime (nebo název aliasu, pokud je zadán).

LIB a Alias klíčová slova

Následující název Function klíčové slovo je název, který program používá pro přístup k funkci importované.Může být stejné jako skutečné jméno funkce volání nebo můžete použít libovolný platný postup název a pak využívají Alias klíčové slovo zadat skutečné jméno funkce volání.

Zadat Lib klíčové slovo, následuje název a umístění knihovny DLL obsahující danou funkci voláte.Není potřeba zadat cestu pro soubory umístěné v adresáři systému Windows.

Použití Alias klíčové slovo není platný název funkce, voláte-li Visual Basic název procedury nebo konflikty s názvem jiné položky v aplikaci.Aliasoznačuje název skutečné funkce volána.

Argument a deklarace typu dat

Deklarujte argumenty a jejich datové typy.Tuto část může být náročné, protože neodpovídají typy dat, které systém Windows používá typy dat v aplikaci Visual Studio.Visual Basicnemá mnoho práce můžete převodem argumenty na kompatibilní datové typy, proces se nazývá zařazování.Můžete explicitně řídit, jak jsou argumenty zařadit pomocí MarshalAsAttribute definované v atributu System.Runtime.InteropServices oboru názvů.

[!POZNÁMKA]

Předchozí verze Visual Basic povoleno, můžete deklarovat parametry As Any, znamená data všech dat můžete použít.Visual Basicvyžaduje použití určitého datového typu pro všechny Declare příkazy.

Konstanty rozhraní API systému Windows

Některé argumenty jsou kombinace konstant.Například MessageBox rozhraní API v tomto návodu přijímá argument celého čísla nazývá Typ ovládá zobrazení okna se zprávou.Číselná hodnota tyto konstanty můžete určit porovnáním #define příkazy v souboru WinUser.h.Číselné hodnoty jsou obvykle zobrazeny v šestnáctkové soustavě, tak, že chcete přidat a převést na desítkové použití kalkulačky.Například pokud chcete kombinovat konstanty vykřičník stylu MB_ICONEXCLAMATION 0x00000030 a Ano/žádný styl MB_YESNO 0x00000004, můžete přidat čísla a získat výsledek 0x00000034 nebo 52 desítkové.Můžete použít desítkové výsledek přímo, je lepší tyto hodnoty deklarovat jako konstanty v aplikaci a kombinovat je použití Or operátor.

K deklarování konstanty pro volání rozhraní API systému Windows

  1. V dokumentaci pro volání funkce systému Windows.Určete název konstanty, které používá a název souboru pro soubor s příponou h, který obsahuje číselné hodnoty pro tyto konstanty.

  2. Pomocí textového editoru, například programu Poznámkový blok, zobrazit obsah souboru (soubor s příponou h) záhlaví a najít hodnoty konstanty, kterou používáte.Například MessageBox rozhraní API používá konstanta MB_ICONQUESTION v okně zobrazit otazník.Definice pro MB_ICONQUESTION v WinUser.h a vypadá takto:

    #define MB_ICONQUESTION 0x00000020L

  3. Přidat rovnocenné Const prohlášení třídu nebo modul zpřístupnit tyto konstanty aplikace.Příklad:

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

Volání knihovny DLL postup

  1. Přidat tlačítko s názvem Button1 ke spuštění formuláře projektu a poklepejte na něj zobrazit jeho kód.Zpracování události tlačítka se zobrazí.

  2. Přidání kódu Click obslužnou rutinu události pro tlačítko, které jste přidali postup volání a poskytovat příslušné 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. Spuštění projektu stisknutím klávesy F5.Zobrazí se okno zprávy s oběma Ano a Č tlačítka odpověď.Klepněte na kterýkoli z nich.

Kódování dat

Visual Basicautomaticky převede datové typy parametrů a vrácené hodnoty pro volání rozhraní API systému Windows, ale lze použít MarshalAs atribut explicitně určit nespravované datové typy, které se očekává, že rozhraní API.Další informace o interop zařazování, viz Zařazování spolupráce.

Použití Declare a MarshalAs má ve volání API

  1. Určit název funkce, které chcete volat plus argumenty, datové typy a vrátí hodnotu.

  2. Zjednodušení přístupu k MarshalAs atributu, přidejte Imports prohlášení na začátek kódu pro třídu nebo modul, jako v následujícím příkladu:

    Imports System.Runtime.InteropServices
    
  3. Přidat třídu nebo modul a použít funkce prototypu pro importované funkce MarshalAs atributu na parametry nebo návratovou hodnotu.Následující příklad volání rozhraní API, která očekává typ void* je zařazen jako AsAny:

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

Volání rozhraní API pomocí DllImport.

DllImport Atribut poskytuje druhý způsob, jak volat funkce v knihovnách DLL bez knihovny typů.DllImportje zhruba ekvivalentní použití Declare prohlášení, ale poskytuje větší kontrolu nad jak se nazývají funkce.

Můžete použít DllImport s většinu rozhraní API systému Windows vyžaduje jako volání odkazuje na sdílené (někdy se nazývá statické) metody.Nelze použít metody, které vyžadují instance třídy.Na rozdíl od Declare příkazy, DllImport nelze použít volání MarshalAs atributu.

Volání rozhraní API systému Windows pomocí atributu DllImport.

  1. Otevřít nový projekt aplikace systému Windows klepnutím na Nový na soubor nabídce a klepnutím na projektu.Zobrazí se dialogové okno Nový projekt.

  2. Vyberte Aplikace systému Windows ze seznamu Visual Basic projektu šablony.Zobrazí se nový projekt.

  3. Přidat tlačítko s názvem Button2 do spouštěcího formuláře.

  4. Poklepejte na Button2 otevřít zobrazení kódu formuláře.

  5. Zjednodušení přístupu k DllImport, přidat Imports na začátek kódu pro třídu spouštěcí formulář výkazu:

    Imports System.Runtime.InteropServices
    
  6. Prázdná funkce aplikace předcházející deklarovat End Class prohlášení pro formuláře a název funkce MoveFile.

  7. Použije Public a Shared modifikátory deklarace funkce a nastavení parametrů pro MoveFile na základě argumentů funkce rozhraní API systému Windows používá:

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

    Funkce může mít jakýkoli název platný postup; DllImport atribut určuje název knihovny DLL.Také zpracovává interoperability kódování parametrů a vrácené hodnoty, takže Visual Studio datové typy, které jsou podobné dat můžete vybrat typy používá rozhraní API.

  8. Použije DllImport atribut prázdný funkce.První parametr je název a umístění knihovny DLL obsahující funkce, které voláte.Není potřeba zadat cestu pro soubory umístěné v adresáři systému Windows.Druhý parametr je pojmenovaný argument, který určuje název funkce v rozhraní API systému Windows.V tomto příkladu DllImport atribut vynutí volání na MoveFile předání MoveFileW v KERNEL32.DLL.MoveFileW Metoda zkopíruje soubor z cesty src cestu 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. Přidání kódu Button2_Click obslužnou rutinu události pro volání funkce:

    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. Vytvořte soubor s názvem: Test.txt a umístit do adresáře C:\Tmp na pevném disku.V případě potřeby, vytvořte v adresáři Tmp.

  11. Stisknutím klávesy F5 aplikaci spustit.Zobrazí se hlavní formulář.

  12. Klepněte na tlačítko Button2.Lze přesunout soubor, zobrazí se zpráva "soubor byl úspěšně přesunut.".

Viz také

Referenční dokumentace

Declare – příkaz

DllImportAttribute

MarshalAsAttribute

Auto (Visual Basic)

Alias – klauzule (Visual Basic)

Koncepty

Vytváření prototypů ve spravovaném kódu

Ukázka zpětného volání

Další zdroje

Zprostředkovatel komunikace s objekty COM (Visual Basic)