Compartir a través de


Consumo de funciones DLL no administradas

La invocación de plataforma es un servicio que permite que el código administrado llame a funciones no administradas implementadas en bibliotecas de vínculos dinámicos (DLL), como las de la API de Windows. Busca e invoca una función exportada y gestiona sus argumentos (enteros, cadenas, matrices, estructuras, etc.) a través del límite de interoperatividad según sea necesario.

En esta sección se presentan las tareas asociadas al consumo de funciones DLL no administradas y se proporciona más información sobre la invocación de plataforma. Además de las siguientes tareas, hay consideraciones generales y un vínculo que proporciona información y ejemplos adicionales.

Para consumir funciones DLL exportadas

  1. Identificar funciones en archivos DLL.

    Como mínimo, debe especificar el nombre de la función y el nombre del archivo DLL que lo contiene.

  2. Cree una clase para contener funciones DLL.

    Puede usar una clase existente, crear una clase individual para cada función no administrada o crear una clase que contenga un conjunto de funciones no administradas relacionadas.

  3. Cree prototipos en código administrado.

    [Visual Basic] Use la instrucción Declare con las palabras clave Function y Lib . En algunos casos poco frecuentes, puede usar DllImportAttribute con las palabras clave Función Compartida. Estos casos se explican más adelante en esta sección.

    [C#] Usa el DllImportAttribute para especificar la biblioteca DLL y la función. Marque el método con los modificadores estáticos y extern .

    [C++] Usa DllImportAttribute para identificar la DLL y la función. Marque la función o el método contenedor con extern "C" .

  4. Llamar a una función DLL.

    Llame al método en la clase administrada como lo haría con cualquier otro método administrado. Pasar estructuras e implementar funciones de devolución de llamada son casos especiales.

Para ver ejemplos que muestran cómo construir declaraciones basadas en .NET que se utilizarán con la invocación de plataforma, consulte Marshalling Data with Platform Invoke.

Aproximación a la invocación de plataforma

La invocación de plataforma usa metadatos para encontrar las funciones exportadas y serializar sus argumentos en tiempo de ejecución. En la ilustración siguiente se muestra este proceso.

Diagrama que muestra una llamada de invocación de plataforma.

Cuando la invocación de plataforma llama a una función no administrada, realiza la siguiente secuencia de acciones:

  1. Busca el archivo DLL que contiene la función .

  2. Carga el archivo DLL en la memoria.

  3. Busca la dirección de la función en la memoria, inserta sus argumentos en la pila y calcula las referencias de los datos si es necesario.

    Nota:

    La búsqueda y carga del archivo DLL y la ubicación de la dirección de la función en memoria solo se producen en la primera llamada a la función.

  4. Transfiere el control a la función no administrada.

La invocación de plataforma devuelve las excepciones generadas por la función no administrada al llamador administrado.

Consulte también