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.