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()}"); ...
Get C# 12 en pocas palabras now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.