Consumir funciones DLL no administradas
La invocación de plataforma es un servicio que permite al código administrado llamar a funciones no administradas implementadas en bibliotecas de vínculos dinámicos (DLL), como los de la API de Windows. Busca y llama a una función exportada y calcula las referencias de sus argumentos (enteros, cadenas, matrices, estructuras etc.) a través de los límites de interoperación según sea necesario.
En esta sección se introducen las tareas asociadas con el consumo de funciones DLL no administradas y se proporciona más información sobre la invocación de plataforma. Además de las tareas siguientes, hay consideraciones generales y un vínculo que proporciona más información y ejemplos.
Para consumir funciones DLL exportadas
Identificar funciones en archivos DLL.
Como mínimo, debe especificar el nombre de la función y el nombre del archivo DLL que la contiene.
Crear una clase para contener funciones de archivos DLL.
Puede usar una clase existente, crear una clase individual para cada función no administrada o crear una clase que contiene un conjunto de funciones no administradas relacionadas.
Crear prototipos en código administrado.
[Visual Basic] Use la instrucción Declare con las palabras clave Function y Lib. En algunos casos excepcionales, puede usar DllImportAttribute con las palabras clave Shared Function. Estos casos se explican más adelante en esta sección.
[C#] Use DllImportAttribute para identificar el archivo DLL y la función. Marque el método con los modificadores static y extern.
[C++] Use DllImportAttribute para identificar el archivo DLL y la función. Marque la función o el método contenedor con extern "C" .
-
Llame al método de la clase administrada como haría con cualquier otro método administrado. Pasar estructuras e implementar funciones de devolución de llamada son casos especiales.
Para obtener ejemplos que muestran cómo construir . Las declaraciones basadas en NET que se usarán con la invocación de plataforma, consulte Marshalling Data with Platform Invoke (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 siguiente ilustración se muestra este proceso.
Cuando la invocación de plataforma llama a una función no administrada, realiza la siguiente secuencia de acciones:
Busca el archivo DLL que contiene la función.
Carga el archivo DLL en la memoria.
Busca la dirección de la función en memoria e inserta sus argumentos en la pila, lo que hace que los datos se desalmenten según sea necesario.
Nota:
La búsqueda y carga del archivo DLL y la búsqueda de la dirección de la función en memoria solo se realiza en la primera llamada a la función.
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.