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.

Preguntas similare

Leer las respuestas

#6 RFOG
08/05/2008 - 09:25 | Informe spam
Efectivamente, así es.

Pero si lo único que quieres es evitar el parpadeo, mira mi otra respuesta
aquí mismo.

"Jose M.Bonet" escribió en el mensaje de noticias
news:
Gracias RFOG, creo que me quedo con la segunda opcion ya que me parece la
mas correcta y profesional.

No importa que exista una dll mas, como comente esto va ha ir en un
sistema embedded por lo que lo instalare yo equipo por equipo y
practicamente no deberian haber actualizaciones.

Entonces a ver si lo he entendido bien.

1.- Se debe crear el control con C++ no manejado y encapsularlo en una DLL
2.- Se debe crear una DLL con C++/CLI (que si no me equivoco esto es C++
manejado) que para lo unico que sirve es de Interface entre el C# y el C++
no manejado.ya que C# no puede gestionar codigo no manejado.
3.- Y finalmente el aplicativo en C# que llamara a la DLL C++/CLI.

Por favor corrijeme si me he equivocado. Y gracias.


"RFOG" escribió en el mensaje
news:
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.








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
Durante la juventud creemos amar; pero sólo cuando hemos envejecido en
compañía de otro, conocemos la fuerza del amor.
Respuesta Responder a este mensaje
#7 Jose M.Bonet
08/05/2008 - 09:34 | Informe spam
Si, ahora mismo mi principal problema es el parpadeo. Pero aun asi (leyendo
tu otra acertada respuesta) creo que voy a probar lo de las DLL, el
resultado sera el mismo pero me va a servir para conocer mejor .NET. Ahora
estoy en la fase de crear todo el entorno, es decir los controles y
componentes y mi intencion es que todo esto me sirva para futuros
desarrollos.

Por cierto pongo otro post para no desviarme del tema que tratamos en este.


"RFOG" escribió en el mensaje
news:
Efectivamente, así es.

Pero si lo único que quieres es evitar el parpadeo, mira mi otra respuesta
aquí mismo.

"Jose M.Bonet" escribió en el mensaje de
noticias news:
Gracias RFOG, creo que me quedo con la segunda opcion ya que me parece la
mas correcta y profesional.

No importa que exista una dll mas, como comente esto va ha ir en un
sistema embedded por lo que lo instalare yo equipo por equipo y
practicamente no deberian haber actualizaciones.

Entonces a ver si lo he entendido bien.

1.- Se debe crear el control con C++ no manejado y encapsularlo en una
DLL
2.- Se debe crear una DLL con C++/CLI (que si no me equivoco esto es C++
manejado) que para lo unico que sirve es de Interface entre el C# y el
C++ no manejado.ya que C# no puede gestionar codigo no manejado.
3.- Y finalmente el aplicativo en C# que llamara a la DLL C++/CLI.

Por favor corrijeme si me he equivocado. Y gracias.


"RFOG" escribió en el mensaje
news:
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.








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
> Durante la juventud creemos amar; pero sólo cuando hemos envejecido en
compañía de otro, conocemos la fuerza del amor.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida