Visual Basic - Llamadas entre DLL's en VB6

Life is soft - evento anual de software empresarial
 
Vista:

Llamadas entre DLL's en VB6

Publicado por yTHoR (3 intervenciones) el 14/12/2004 08:10:54
Hola, alguien podría ayudarme con el siguiente problema?

Tengo creadas dos clases DLL: CLIENTES.DLL y PEDIDOS.DLL, cada una contiene una serie de formularios, modulos, modulos de clase, etc. Dentro de la clase CLIENTES.DLL referencio a PEDIDOS.DLL y la llamo para ver los pedidos asociados a un cliente. Del mismo modo en la clase PEDIDOS.DLL referencio a CLIENTES.DLL para ver los datos de un cliente que ha realizado un pedido en concreto (su ficha). Mi problema es que la aplicación da un error si se realiza lo siguiente:

Desde CLIENTES.DLL se accede a un pedido (PEDIDOS.DLL) y desde ese pedido se intenta acceder a la ficha del cliente (otra llamada a CLIENTES.DLL) para ver por otros datos asociados al mismo, como albaranes u otros documentos. En ese momento me da el siguiente error: \"Error 400 en tiempo de ejecución: El formulario ya está visible. No se puede mostrar como formulario modal.\"

Necesito solucionar este problema ya que esto mismo me pasa con otras relaciones, agradecería mucho cualquier ayuda o sugerencia.

GRACIAS.
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:Llamadas entre DLL's en VB6

Publicado por Mauro (2 intervenciones) el 14/12/2004 13:07:27
No se si esto te puede solucionar en algo, pero no es una buena práctica poner formularios dentro de ActiveX Dll.
La idea de las Dll's es contener logica de negocio en el formato de funciones o módulos.
Me parece que el esquema aconcejable seria que clientes.dll y pedidos.dll sean referenciados por un tercer proyecto MiAplicacion.exe el cual instancia los objetos necesarios para obtener los datos y el exe se encarga de visualizarlos.
De este modo tendrias la division entre capa de negocios y capa de presentacion.

Pero si insistis en el esquema que describis puede ser que al formulario lo estes mostrando de la siguiente forma

miFormulario.show

cuando la forma correcta seria

dim oFRM as new miFormulario
oFRM.show

(no te olvides de oFRM=Nothing cuando ya no lo uses)

Bueno espero que te sea útil

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:Llamadas entre DLL's en VB6

Publicado por Ayudante (349 intervenciones) el 14/12/2004 18:24:33
En realidad falta algo importante, la comunicación entre DLLs puede ser en una dirección, o en ambas, pero lo que hace yTHoR es una redundancia un poco inaceptable.

Si clientes llama a pedidos, entonces clientes debe preocuparse por enviar la ficha a pedidos, o sea, pedidos no debe solicitarle nada a clientes, solo recibe y punto.

El tema de las DLLs lo manejo desde hace años cuando empecé a trabajar y fue algo rudito de entender, ahora, es un tema de todos los días, incluso trabajo en una empresa ajeta a "maquilas de software" y por mis trabajos anteriores, veo cómo se incurren constantemente en errores de estos tipos, la eficiencia es natural, pero la eficacia en los proyectos es solo de práctica.

DLL >>> Funciones
EXE >>> Formularios
OCX >>> Formularios, Funciones, Componentes extendidos

Eso es un micro-micro-micro esquema de los archivos de Windows y el desarrollo de aplicaciones.
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:Llamadas entre DLL\'s en VB6

Publicado por yTHoR (3 intervenciones) el 15/12/2004 08:35:54
Estoy totalmente deacuerdo contigo \'Ayudante\', pero en realidad esto no es obra mia, tan solo soy la persona encargada de solucionar el problema, por ahora solo quiero saber si es posible y como (aunque soy consciente de la ineficacia de la solución). Lo que ocurre es que esto lleva así varios años y replantear el diseño sería tan costoso que incluso convendría comenzar de cero aplicando ingeniería del software y pasarlo a .NET (opción que recomendé en su día y que fue totalmente rechada por cuestión de tiempo, el eterno problema).

Si que se utiliza un tercer programa que llama a las DLL (un EXE con un MDIFORM) y si que utilizo algo de la forma:
dim oFRM as new miFormulario
oFRM.show

Creo que el problema esta al compilar la DLL, creo que debe haber alguna opción que se me pase por alto que permita instanciamiento multiple o algo por el estilo. Os muestro algo de código que se utiliza para la comunicación:

- Desde el MDI se llama así a las DLL (también se usa este mismo código dentro de las DLL para llamar a otras DLL):

Dim xx As CLASS_CLIENTES
Set xx = New CLASS_CLIENTES
...
Call xx.GeneralClientes(...)

- Dentro de las DLL, en el modulo de clase CLASS_CLIENTES se usa la siguiente función:

Public Function GeneralClientes(...) As Boolean
Dim formAMostrar As New clientes1
...
SetParent formAMostrar.hWnd, lnghWndNewParent
formAMostrar.Show
Set formAMostrar = Nothing
End Function

NO SE HACE LLAMADA MODAL (vbModal).

Agradezco vuestra ayuda.
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