Capítulo 25. 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;

class MsgBoxTest
{
  [DllImport("user32.dll")]
  static extern int MessageBox (IntPtr hWnd, string text, string caption,
                                int type);
  public static void Main()
  {
    MessageBox (IntPtr.Zero,
                "Please do not press this again.", "Attention", 0);
  }
}

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

Get C# 8.0 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.