Inicio- Presentaciones- Artículos- Utilidades- Links- Contacto- Acerca de...

Publicado el 19/Jul/2005

Recientemente me he encontrado con dos proyectos donde el uso de Visual C++ .NET ha ahorrado mucho tiempo y esfuerzo.


En ambos casos el problema estaba en cómo crear ‘wrappers’ en .NET para acceder a varios APIs nativos (Win32). Uno estaba relacionado con el acceso a APIs de Windows y el otro es un API propietario de un fabricante de unos equipos de video digital.


Inicialmente en los dos proyectos se intentó primero la creación de un ‘wrapper’ en C#. Esta aproximación siempre suena razonable, pero en cuanto el API a usar sea un poco elaborado, donde se necesite el uso de estructuras complejas, o necesitemos el uso de ‘callbacks’, la situación se complica bastante y, lo que en principio parecía una tarea sencilla, se convierte en horas y horas de intentar definir cómo escribir correctamente los tipos de datos para que se pasen adecuadamente al API, probar las modificaciones y obtener errores difíciles de depurar.


Mediante el uso de Visual C++ .NET y aproximando el problema de otra manera, es bastante fácil crear este tipo de ‘wrappers’. La idea usada en los dos casos anteriores fue la siguiente:


• Crear un proyecto de class library en Visual C++ .NET.


• En ese proyecto se crea una clase C++ .NET (que incluye las extensiones ‘manejadas’). Esta expone las propiedades y métodos deseados a la aplicación .NET final, que se desarrollará en el lenguaje .NET seleccionado, ya sea VB.NET o C#.


• En el mismo proyecto se incluye una clase no manejada (Win32) que es la que hará uso del API nativo requerido.


• La clase C++ .NET usará esta otra clase Win32 interna de manera exclusiva, exponiendo la funcionalidad del API a través de su interface .NET.

De esta manera, no hay que hacer traducciones complejas de estructuras ya que se usan de manera natural dentro de C++. En el caso de funciones de callback, estas se pueden exponer al exterior como eventos o delegados, convirtiéndose en algo natural también a la hora de su uso desde la aplicación cliente final.


Es cierto que hay que conocer algo de C++ para utilizar esta aproximación, pero como su uso se centra en algo bastante concreto, merece la pena hacer ese esfuerzo inicial que se traduce posteriormente en menos dolores de cabeza.


Aquí tenéis un link a una serie de artículos que me pasó mi amigo David García como referencia http://www.ondotnet.com/pub/a/dotnet/2004/03/29/mcpp_part3.html

Archivado como: .NET