VC++ desde C#

07/05/2008 - 17:48 por Jose M.Bonet | Informe spam
Os expongo el tema para ver si alguien me puede asesorar.

Necesito realizar una serie de componentes graficos. Mi intencion inicial es
la de encapsular los componentes/clases dentro de una libreria VC++ y luego
utilizarlos desde el programa principal hecho en C#.

Pero no tengo ni idea de por donde cogerlo y si esta es una buena opcion o
no. A ver si alguien me puede aconsejar y si me pasais algun enlace con
ejemplos pues ya seria genial.

PD. No quiero utilizar los usercontrols pues los veo demasiado lentos.
 

Leer las respuestas

#1 RFOG
07/05/2008 - 19:38 | Informe spam
Hola.

El tema no es sencillo, y casi es un mundo por sí mismo. La idea que tienes
es perfecta: un módulo en C++ optimizado al máximo que es ejecutado desde
C#.

Tienes dos opciones posibles:

La primera y menos óptima es usar el Interop por atributos del C#
directamente sobre el módulo de C++, que típicamente es una DLL con
exportaciones de funciones estilo C, no C++. Es equivalente a lo que se hace
cuando se llama a las propias funciones nativas de Win32, pero con tu DLL.

La segunda y más optima es utlizar un ensamblado en C++/CLI que envuelva a
la DLL en C, y luego tu llamas a ese ensamblado desde C#. El interop IJT de
C++/CLI es mucho más rápido que el de C#, pero tienes la contrapartida de
que has de hacer una nueva DLL en C++/CLI, de forma que dentrías por un lado
tu aplicación, y luego una DLL .NET que a su vez usaría la DLL nativa.

Una tercera opción es compilar el código fuente de C++ nativo con la opción
/clr, o al menos las funciones envolventes, y crear de nuevo un envoltorio
en C++/CLI que sería usado directamente por C#. Aquí la ventaja está en que
sólo tendrías un ensamblado extra, la DLL de C++/CLI, y el rendimiento sería
un poco, pero solo un poco menor.

Ejemplos de todo esto, o al menos ejemplos completos, no hay nada que yo
sepa. Alguna entrada de mi blog de Geeks (mira en mi firma) trata el tema
del Interop IJT de pasada, pero todavía no he escrito nada serio sobre el
tema.

Un punto de entrada para la documentación podría ser este:
http://msdn.microsoft.com/es-es/library/sd10k43k(en-us,VS.80).aspx, aunque
la MSDN no es muy clara al respecto, o al menos yo no he encontrado nada que
clarifique el tema.

Lo que puedes hacer es liarte la manta a la cabeza, elegir uno de los tres
modelos que te he expuesto y conforme te vayan surgiendo cosas las pones en
el grupo de C++ (microsoft.public.es.vc) las que sean de C++ ó C++/CLI y las
demás aquí.

"Jose M.Bonet" escribió en el mensaje de noticias
news:
Os expongo el tema para ver si alguien me puede asesorar.

Necesito realizar una serie de componentes graficos. Mi intencion inicial
es la de encapsular los componentes/clases dentro de una libreria VC++ y
luego utilizarlos desde el programa principal hecho en C#.

Pero no tengo ni idea de por donde cogerlo y si esta es una buena opcion o
no. A ver si alguien me puede aconsejar y si me pasais algun enlace con
ejemplos pues ya seria genial.

PD. No quiero utilizar los usercontrols pues los veo demasiado lentos.






Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Momentos Leves: http://momentosleves.blogspot.com/
Cosas mías: http://rfog.blogsome.com/
Libros, ciencia ficción y programación
La moda es la pugna entre el instinto natural de vestirse y el instinto
natural de desnudarse.

Preguntas similares