Capítulo 24. Interoperabilidad nativa y COM
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
Este capítulo describe cómo integrarse con Bibliotecas de Enlace Dinámico (DLL) nativas (no gestionadas) y componentes del Modelo de Objetos Componentes (COM). A menos que se indique lo contrario, los tipos mencionados en este capítulo existen en el espacio de nombres System o System.Runtime.InteropServices.
Llamada a DLL nativas
P/Invoke, abreviatura de Platform Invocation Services (Servicios de Invocación de Plataforma), te permite acceder a funciones, structs y callbacks en DLL no gestionadas(bibliotecas compartidas en Unix).
Por ejemplo, considera la función MessageBox, definida en la DLL de Windows user32.dll, como sigue:
int MessageBox (HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
Puedes llamar directamente a esta función declarando un método estático con el mismo nombre, aplicando la palabra clave extern y añadiendo el atributo DllImport:
using System;
using System.Runtime.InteropServices;
MessageBox (IntPtr.Zero,
"Please do not press this again.", "Attention", 0);
[DllImport("user32.dll")]
static extern int MessageBox (IntPtr hWnd, string text, string caption,
int type);
Las propias clases MessageBox de los espacios de nombres System.Windows y System.Windows.Forms llaman a métodos no gestionados similares.
Aquí tienes un ejemplo de DllImport para Ubuntu Linux:
Console.WriteLine ($"User ID: {getuid()}"); ...