C/Visual C - crear ventana desde DLL

 
Vista:

crear ventana desde DLL

Publicado por Ideki (4 intervenciones) el 24/06/2005 16:22:12

He creado una aplicacion que captura video de una webcam y lo saca por la pantalla. Ahora quisiera integrarlo en una DLL me modo que se crease la ventana con el video desde una funcion de esa DLL pero no tengo ni ideade por donde empezar.

Es posible hacer eso? como se puede hacer?

Ideki
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:crear ventana desde DLL

Publicado por fernando.gomez (1603 intervenciones) el 24/06/2005 16:55:54
Pues si ya tienes la clase que representa a la ventana, tan sólo tienes que copiar los archivos de esa clase a tu proyecto DLL, y modificarla como sigue:

class __declspec(dllexport) CWebCamWnd
{ ... };

y listo (en particular, esto es con Visual C++ (otros como Borland y MinGW también soportan esa sintaxis); consulta la documentación de tu compilador para ver cómo exportar de una DLL).

En tu proyecto donde vayas a usar esa clase, sólo tienes que incluir el prototipo de la clase, como sigue:

class __declspec(dllimport) CWebCamWnd
{ ... }

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:crear ventana desde DLL

Publicado por Ideki (4 intervenciones) el 24/06/2005 17:45:26
Gracias por responder tan rapido.

El caso es que he usado el asistente de las MFC para crear mi aplicacion (tambien lo pensaba usar para crear la DLL) y tengo un monton de clases y codigo creados automaticamente , asique aunque se lo que hacen no se exactamente como lo hacen.

Ese es mi problema. Para crear la ventanapara el video fue de gran ayuda no tener que preocuparse de todo eso pero pero ahora no se exactamente en que clase se crea la ventana.

Uso Visual net 2003 y las MFC s.

Si alguien me pudiera dar alguna pista mas concreta se lo agradeceri mucho.

Ideki
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:crear ventana desde DLL

Publicado por fernando.gomez (1603 intervenciones) el 24/06/2005 18:52:26
¿Y? Lo único que tienes que hacer es agregar los modificadores __declspec(dllexport) y __declspec(dllimport) donde correspondan, y ya. La explicación sigue siendo válida =D.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:crear ventana desde DLL

Publicado por Ideki (4 intervenciones) el 24/06/2005 20:51:17
gracias por tu interes pero no creo que eso que dices me valga.
Tengo la siguiente estructura:

Tengo creado un proyecto Video y el asistente me añadio las siguientes clases:
CVideoApp
CVideoDoc
CVideoView
CMaimFrame

La ventana se crea desde el metodo InitInstance() de CVideoApp (creo..) pero yo capturo el video de la webcam , lo proceso y los saco por la pantalla desde funciones que estan definidas en la clase de vista ,es decir, CVideoView.

Realmente el contenido de lo que quiero exportar esta en esa clase CVideoView pero nose como comunicar la clase de vista que tengo hecha con la aplicacion cliente de la DLL. . No me imagino como comunicarlos ya que el cliente de la DLL tendria que crear la ventana pero el video deberia tendria que aparecer en esa ventana usando la funcion de la DLL...

Por otro lado la clase CVideoView utiliza un monton de ficheros de cabecera VideoDoc.h, Video.h etc que no creo que los tenga que añadir a la DLL ya que forman parte de mi projecto y no le serviran de nada a la aplicacion que usa la DLL.

Deberia de crear la ventana desde una clase intependiente de las clases que me generan Las MFC? como hago eso.

No lo tengo claro

A ver si alguien puede arrojar algo de luz en todo esto...
Gracias de antemano

Ideki


Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:crear ventana desde DLL

Publicado por fernando.gomez (1603 intervenciones) el 24/06/2005 22:16:45
Va de nuez. Lo que nos interesa es que CVideoView --que me supongo será una clase derivada de CView-- esté en una DLL aparte, ¿cierto? Entonces tienes que pasar tu clase a un fichero --el que sea-- que se encuentre dentro de tu proyecto DLL. La clase luciría algo así:

class __declspec(dllexport) CVideoView : public CView
{ ... };

Si ya la tienes porque te la creó el AppWizard, sólo tienes que hacer el copy&paste, aún sin entender de qué trata el asunto. Sólo agrega el modificador __declspec(dllexport) y ya, no tienes que hacer nada más.

Evidentemente dentro de tu DLL tienes que habilitar el uso de MFC para que puedas derivar de CView (lo cuál lo puedes hacer desde las propiedades del proyecto en VC7).

Finalmente dentro de tu aplicación, tienes que incluir la definición de tu clase con __declspec(dllimport), y enlazar tu proyecto con el archivo .LIB que te genera al compilar la DLL. Esto es todo, no hay nada más que hacer. El proceso sigue de forma normal, puedes mandar llamar una instancia de CVideoView desde CWinApp::InitInstance, CFrameWnd::Create y desde cualquier otro lado de la aplicación.

Yo lo hago todos los días para mis proyectos. Tengo por costumbre crear una DLL en la que se encuentre toda la interfaz gráfica, y emplear dichas clases en mi aplicación. Si aún no me crees, puedes consultar la documentación oficial de Microsoft en www.msdn.microsoft.com/visualc.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:crear ventana desde DLL

Publicado por Ideki (4 intervenciones) el 25/06/2005 13:47:14
poues no lo acabo de pillar... lo siento.

Vamos por partes porque me da que esto es mas un problema de procedimiento que de codigo (quiza tambien un problema de que no me entero ;P )

TE digo lo que hago y lo que sucede. vale?
- Creo un projecto de MFC DLL concretamente de tipo "MFC extension DLL".
- Copio los archivos view.cppy view.h al directorio del nuevo proyecto y los añado al projecto en el solution explorer.
- Edito el CVideoView.h y añado __declspec(dllexport) a la definicion dela clase
- Al compilar me dice que no encuentra los archivos de cabecera CVideoDoc.h, Cvideo.h y todos los demas archivos que usa CVideiView y que forman parte de la aplicacion original. Al añadirlas al proyecto estas a su vez requieren de otros archivos .h y al final acabo añadiendo todo el proyecto inicial en la DLL.

Por el otro lado, ahora la ventana con el video se genera automaticamente al hacer "run". Como hare para crear la ventana desde el cliente que use la DLL? con crear un objeto de la clase CVideoView importada bastara?

Gracias de antemano

Ideki
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:crear ventana desde DLL

Publicado por Benjamin (6 intervenciones) el 26/06/2005 09:34:54
Bueno para los fanaticos del MFC ya veo que tampoco hay descanso,
Bueno primero es logico que tengas que importar la mayor parte de tu codigo original si por alguna razon los abstractos programadores de VC entendieran los procesos de creacion de threads ventanas ... como apunto el amigo anteriormente tenes que modifical solo una parte del codigo la que posibilita la creacion de tu clase, pero veo por tu post que estas medio perdido. quiza sepas manejar clases y objetos a la perfeccion pero no tienes mucha idea de como funciona una DLL o un EXE y mucho menos un compilador haveces es mejor hacer pasos cortos en vez de saltos alocados el C++ es muy lindo lenguaje pero complicado y si encima programas con las frameworks de windows ... los problemas se triplican ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar