Wykorzystywanie niezarządzanych funkcji DLL

Wywołanie platformy to usługa, która umożliwia kodowi zarządzanemu wywoływanie funkcji niezarządzanych zaimplementowanych w bibliotekach linków dynamicznych (DLL), takich jak te w interfejsie API systemu Windows. Lokalizuje i wywołuje wyeksportowaną funkcję i marshaluje swoje argumenty (liczby całkowite, ciągi, tablice, struktury itd.) w granicach współdziałania zgodnie z potrzebami.

W tej sekcji przedstawiono zadania związane z korzystaniem z funkcji niezarządzanych bibliotek DLL i zawiera więcej informacji o wywołaniach platformy. Oprócz poniższych zadań istnieją ogólne zagadnienia i link z dodatkowymi informacjami i przykładami.

Aby korzystać z wyeksportowanych funkcji DLL

  1. Identyfikowanie funkcji w bibliotekach DLL.

    Minimalnie należy określić nazwę funkcji i nazwę biblioteki DLL, która ją zawiera.

  2. Utwórz klasę do przechowywania funkcji DLL.

    Możesz użyć istniejącej klasy, utworzyć pojedynczą klasę dla każdej niezarządzanej funkcji lub utworzyć jedną klasę zawierającą zestaw powiązanych funkcji niezarządzanych.

  3. Tworzenie prototypów w kodzie zarządzanym.

    [Visual Basic] Użyj instrukcji Declare ze słowami kluczowymi Function i Lib . W niektórych rzadkich przypadkach można użyć atrybutu DllImportAttribute ze słowami kluczowymi funkcji udostępnionej. Te przypadki zostały wyjaśnione w dalszej części tej sekcji.

    [C#] Użyj atrybutu DllImportAttribute , aby zidentyfikować bibliotekę DLL i funkcję. Oznacz metodę za pomocą modyfikatorów statycznych i extern .

    [C++] Użyj atrybutu DllImportAttribute , aby zidentyfikować bibliotekę DLL i funkcję. Oznacz metodę otoki lub funkcję za pomocą extern "C".

  4. Wywoływanie funkcji DLL.

    Wywołaj metodę w klasie zarządzanej, tak jak w przypadku dowolnej innej metody zarządzanej. Przekazywanie struktur i implementowanie funkcji wywołania zwrotnego to specjalne przypadki.

Przykłady demonstrujące sposób konstruowania elementu . Deklaracje oparte na platformie net, które mają być używane z wywołaniem platformy, zobacz Marshalling Data with Platform Invoke (Marshalling Data with Platform Invoke).

Bliżej przyjrzyj się wywołaniom platformy

Wywołanie platformy opiera się na metadanych w celu zlokalizowania wyeksportowanych funkcji i marshalingu ich argumentów w czasie wykonywania. Poniższa ilustracja przedstawia ten proces.

Diagram that shows a platform invoke call.

Gdy wywołanie platformy wywołuje funkcję niezarządzaną, wykonuje następującą sekwencję akcji:

  1. Lokalizuje bibliotekę DLL zawierającą funkcję .

  2. Ładuje bibliotekę DLL do pamięci.

  3. Lokalizuje adres funkcji w pamięci i wypycha argumenty do stosu, ustawiając zakres danych zgodnie z potrzebami.

    Uwaga

    Lokalizowanie i ładowanie biblioteki DLL oraz lokalizowanie adresu funkcji w pamięci występuje tylko przy pierwszym wywołaniu funkcji.

  4. Przenosi kontrolkę do funkcji niezarządzanej.

Wywołanie platformy zgłasza wyjątki wygenerowane przez funkcję niezarządzaną do zarządzanego wywołującego.

Zobacz też