Používání nespravovaných funkcí DLL
Volání platformy je služba, která umožňuje spravovanému kódu volat nespravované funkce implementované v knihovnách dynamického propojení (DLL), jako jsou například funkce v rozhraní API systému Windows. Podle potřeby vyhledá a vyvolá exportovanou funkci a zařadí její argumenty (celá čísla, řetězce, pole, struktury atd.).
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
Identifikace funkcí v knihovnách DLL
Minimálně je nutné zadat název funkce a název knihovny DLL, která ji obsahuje.
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í.
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#] K identifikaci knihovny DLL a funkce použijte dllImportAttribute . Označte metodu statickými a externovými modifikátory.
[C++] K identifikaci knihovny DLL a funkce použijte dllImportAttribute . Označte metodu obálky nebo funkci extern "C".
Volání funkce knihovny 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 platformě, které se mají použít s voláním platformy, najdete v tématu Marshalling Data with Platform Invoke.
Bližší pohled na vyvolání platformy
Volání platformy spoléhá na metadata k vyhledání exportovaných funkcí a zařazování argumentů za běhu. Následující obrázek znázorňuje tento proces.
Když platforma volá nespravovanou funkci, provede následující posloupnost akcí:
Vyhledá knihovnu DLL obsahující funkci.
Načte knihovnu DLL do paměti.
Vyhledá adresu funkce v paměti a nasdílí její argumenty do zásobníku a podle potřeby zařadí 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.
Přenese řízení do nespravované funkce.
Volání platformy vyvolá výjimky vygenerované nespravovanou funkcí spravovanému volajícímu.