Sdílet prostřednictvím


Využívání nespravovaných funkcí knihovny DLL

Platform invoke je služba, která umožňuje spravovanému kódu volat nespravované funkce implementované v knihovnách dynamického propojení (DLL), například funkce v rozhraní API systému Windows. Vyhledá a vyvolá exportovanou funkci a podle potřeby zařadí její argumenty (celá čísla, řetězce, pole, struktury atd.) přes hranici interoperace.

Tato část představuje úlohy spojené s používáním nespravovaných funkcí knihovny DLL a poskytuje další informace o volání platformy. Kromě následujících úloh je potřeba vzít v úvahu obecné aspekty a odkaz s dalšími informacemi a příklady.

Využití exportovaných funkcí knihovny DLL

  1. Identifikace funkcí v knihovnách DLL

    Minimálně je nutné zadat název funkce a název knihovny DLL, která ji obsahuje.

  2. Vytvořte třídu pro uložení funkcí knihovny DLL.

    Můžete použít existující třídu, vytvořit jednotlivé třídy pro každou nespravovanou funkci nebo vytvořit jednu třídu, která obsahuje sadu souvisejících nespravovaných funkcí.

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

    [Visual Basic] Použijte příkaz Declare s klíčovými slovy Function a Lib. V některých výjimečných případech můžete použít DllImportAttribute s klíčovými slovy Sdílená funkce. Tyto případy jsou vysvětleny dále v této části.

    [C#] Použijte DllImportAttribute k identifikaci knihovny DLL a funkce. Označte metodu modifikátory static a extern.

    [C++] Použijte DllImportAttribute k identifikaci knihovny DLL a funkcí. Označte metodu obálky nebo funkci extern "C".

  4. Zavolat funkci DLL.

    Volejte metodu ve spravované třídě stejně jako jakoukoli jinou spravovanou metodu. Předávání struktur a implementace funkcí zpětného volání jsou zvláštní případy.

Příklady, které demonstrují, jak sestavit deklarace založené na .NET, které se mají použít s platformním voláním, najdete v části Marshalling Data with Platform Invoke.

Bližší pohled na vyvolání funkcí platformy

Platform Invoke spoléhá na metadata k vyhledání exportovaných funkcí a zprostředkování jejich argumentů za běhu. Následující obrázek znázorňuje tento proces.

Diagram znázorňující volání Platform Invoke (P/Invoke)

Když platforma volá nespravovanou funkci, provede následující posloupnost akcí:

  1. Vyhledá knihovnu DLL obsahující funkci.

  2. Načte knihovnu DLL do paměti.

  3. Vyhledá adresu funkce v paměti a vloží její argumenty do zásobníku, přičemž podle potřeby uspořádá data.

    Poznámka:

    Vyhledání a načtení knihovny DLL a vyhledání adresy funkce v paměti probíhá pouze při prvním volání funkce.

  4. Přenese řízení do nespravované funkce.

Platformní volání vyvolá spravovanému volajícímu výjimky vygenerované nespravovanou funkcí.

Viz také