Posts recientes

El contenido de este blog tiene una licencia Creative Commons.
Creative Commons

Tipos dinámicos y el acceso a objetos COM en C# 4.0   

Con la aparición de .NET en el panorama de los lenguajes de programación muchos de nosotros, desarrolladores de software, tuvimos que escoger entre desarrollar software en VB.NET o C#. Gestionado de forma correcta VB.NET y C# no tienen ventajas evidentes uno sobre el otro y en la mayoría de los casos la elección se limitaba a una cuestión de familiaridad o comodidad con la sintaxis del propio lenguaje. A los que nos decantamos por la nueva sintaxis de C# de vez en cuando nos vemos empujados por causas de fuerza mayor al desarrollo de ciertos módulos o librarías en VB.NET. Una de las principales causas ha sido y todavía es, sin duda, la comunicación con interfaces COM.

C# permite la comunicación con objetos COM mediante un PIA (Primary Interop Assembly), un ensamblado en código manejado, que hace de interfaz entre nuestra aplicación y el objeto. Este PIA  está estrechamente ligado a la versión del COM con el que vamos a comunicar y debe ser desplegado junto con nuestra aplicación. La interfaz generada es pesada de utilizar en C# por numerosas razones de nomenclatura en los métodos. En contrapartida VB.NET tiene la habilidad heredada de VB6 de realizar late-binding con este tipo de objetos, de forma que no se hace necesaria la creación de un PIA, siendo mucho más cómodo de trabajar.

En C# 4.0 se introducen los tipos dinámicos mediante la palabra clave dynamic, lo cual nos aporta nuevas formas de desarrollar y nos ahorra disgustos en el enlace con COM. Muchos puristas quizás no estén completamente de acuerdo con la necesidad de introducir este tipado en tiempo de ejecución pero seguro que más de uno lo agradecerá. ¿Morirá algún día la tecnología COM? De momento sigue bien viva y no parece que tenga fecha de caducidad, de forma que bienvenidas sean las nuevas características de late-binding de C# 4.0.

Aquí podéis ver un ejemplo de enlace con Word (vía COM) desde C# 4.0.

public static class WordDocument
{
  public const String TemplateName = @"Sample.dotx";
  public const String CurrentDateBookmark = "CurrentDate";
  public const String SignatureBookmark = "Signature";

  public static void Create(string file, DateTime now, String author)
  {
    // Run Word and make it visible for demo purposes
    dynamic wordApp = new Application { Visible = true };
            
    // Create a new document
    var doc = wordApp.Documents.Add(TemplateName);
    templatedDocument.Activate();

    // Fill the bookmarks in the document
    doc.Bookmarks[CurrentDateBookmark].Range.Select();
    wordApp.Selection.TypeText(current.ToString());
    doc.Bookmarks[SignatureBookmark].Range.Select();
    wordApp.Selection.TypeText(author);

    // Save the document 
    doc.SaveAs(fileName);

    // Clean up
    templatedDocument.Close();
    wordApp.Quit();
  }
}

Vía: C# 4.0, the Dynamic Keyword and COM

 
Publicado  en  27/06/2010  por  Rubén Claramunt Vicente
0  Comentarios  |  Trackback Url  | 0  Enlaces a este post | Bookmark este post con:          
Etiquetas: C#
Technorati Tags:
 

Vinculos a este post

Comentarios