Crear y utilizar archivos DLL de C#

Visual Studio .NET 2003

Las bibliotecas de vínculos dinámicos (DLL) se vinculan al programa en tiempo de ejecución. Para ilustrar la creación y el uso de una DLL, considere el siguiente escenario:

  • MyLibrary.DLL: archivo de biblioteca que contiene los métodos que se utilizarán durante la ejecución. En este ejemplo, la DLL contiene dos métodos, Add y Multiply.
  • Add.cs: archivo de código fuente que contiene el método Add(long i, long j). Devuelve la suma de sus parámetros. La clase AddClass, que contiene el método Add, es un miembro del espacio de nombres MyMethods.
  • Mult.cs: archivo de código fuente que contiene el método Multiply(long x, long y). Devuelve el producto de sus parámetros. La clase MultiplyClass, que contiene el método Multiply, es también un miembro del espacio de nombres MyMethods.
  • MyClient.cs: archivo que contiene el método Main. Utiliza los métodos del archivo DLL para calcular la suma y el producto de los argumentos especificados en tiempo de ejecución.

Archivos de código fuente

Archivo: Add.cs

// Add two numbers
using System; 
namespace MyMethods 
{
   public class AddClass 
   {
      public static long Add(long i, long j) 
      { 
         return(i+j); 
      }
   }
}

Archivo: Mult.cs

// Multiply two numbers
using System; 
namespace MyMethods 
{
   public class MultiplyClass 
   {
      public static long Multiply(long x, long y) 
      {
         return (x*y); 
      }
   }
}

Archivo: MyClient.cs

// Calling methods from a DLL file
using System; 
using MyMethods;
class MyClient 
{
   public static void Main(string[] args) 
   {
      Console.WriteLine("Calling methods from MyLibrary.DLL:"); 
      if (args.Length != 2) 
      {
         Console.WriteLine("Usage: MyClient <num1> <num2>"); 
         return; 
      }
      long num1 = long.Parse(args[0]); 
      long num2 = long.Parse(args[1]); 
      long sum = AddClass.Add(num1, num2);
      long product = MultiplyClass.Multiply(num1, num2);
      Console.WriteLine("The sum of {0} and {1} is {2}",
                   num1, num2, sum); 
      Console.WriteLine("The product of {0} and {1} is {2}", 
                  num1, num2, product); 
   }
}

Este archivo contiene el algoritmo que utiliza los métodos de la DLL, Add y Multiply. Empieza analizando los argumentos especificados en la línea de comandos, num1 y num2. A continuación, calcula la suma mediante el método Add de la clase AddClass, y el producto mediante el método Multiply de la clase MultiplyClass.

Observe que la directiva using situada al principio del archivo permite utilizar los nombres de las clases sin calificar para hacer referencia a los métodos de la DLL en tiempo de compilación, por ejemplo:

MultiplyClass.Multiply(num1, num2); 

De lo contrario, sería necesario usar nombres completos, por ejemplo:

MyMethods.MultiplyClass.Multiply(num1, num2); 

Compilación

Para generar el archivo MyLibrary.DLL, compile los dos archivos Add.cs y Mult.cs mediante la siguiente línea de comandos:

csc /target:library /out:MyLibrary.DLL Add.cs Mult.cs

La opción /target:library indica al compilador que genere un archivo DLL en vez de un archivo EXE. La opción /out del compilador seguida de un nombre de archivo se utiliza para especificar el nombre de archivo de la DLL. Si no se utiliza, el compilador usa el primer archivo (Add.cs) como nombre de la DLL.

Para generar el archivo ejecutable, MyClient.exe, utilice la siguiente línea de comandos:

csc /out:MyClient.exe /reference:MyLibrary.DLL MyClient.cs

La opción /out indica al compilador que genere un archivo EXE y especifica el nombre del archivo (MyClient.exe). Esta opción del compilador no es de uso obligatorio. La opción /reference del compilador especifica el archivo o archivos DLL que utiliza el programa.

Ejecución

Para ejecutar el programa, especifique el nombre del archivo EXE seguido de dos números, por ejemplo:

MyClient 1234 5678

Resultados

Calling methods from MyLibrary.DLL:
The sum of 1234 and 5678 is 6912
The product of 1234 and 5678 is 7006652

Vea también

Paseo por el lenguaje C# | Tutorial de bibliotecas

Mostrar: