Discussion:
Devolver valor desde main en aplicación vb6 para recoger por otra aplicación
(demasiado antiguo para responder)
Javier
2005-09-22 13:12:18 UTC
Permalink
Hola, estoy buscando información sobre algo que en
principio me parece muy simple, pero no he encontrado
nada en vb6, todo sale para vb.net.

¿Alguien sabría cómo hacer que una aplicación (.exe) de
vb6, devuelva un valor de retorno que pueda ser usado
para otra aplicación sepa si la aplicación ha terminado
bien o no?

Se podría grabar un fichero con el valor, pero como es
para obtener desde ASP el código de retorno de una
aplicación en vb que puede ser llamada por varios
usuarios, lo mejor sería obtener dicho valor.

En c se haría con return en la función Main, pero en
vb????

Gracias y saludos.
Gorgorito
2005-09-22 14:13:38 UTC
Permalink
La forma más sencilla que se me ocurre de tirar a lo bruto si no
quieres escribir algo en el registro al salir, es utilizar FindWindow

(lRes As Long)

Do
lRes = FindWindow(vbNullString, "TITULO")
DoEvents
If lRes = 0 Then
Exit Do
End If
Loop


Muy fino no parece
Gorgorito
2005-09-22 14:17:27 UTC
Permalink
Se me olvidó la declaración de la función:


Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Alex Martínez
2005-09-22 14:18:22 UTC
Permalink
Usa la función:
Private Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)

Pero asegúrate de hacerlo cuando ya estás preparado para que finalice tu
aplicación (porque finalizará). Es decir, haz todo lo que tengas que hacer
(cerrar conexiones a BD, descargar formularios, etc.) ANTES de la llamada a
ExitProcess.
--
Saludos,
Alex
[MS-MVP Visual Basic]


"Javier" <***@discussions.microsoft.com> escribi� en el mensaje news:02de01c5bf77$427dc7c0$***@phx.gbl...
Hola, estoy buscando información sobre algo que en
principio me parece muy simple, pero no he encontrado
nada en vb6, todo sale para vb.net.

¿Alguien sabría cómo hacer que una aplicación (.exe) de
vb6, devuelva un valor de retorno que pueda ser usado
para otra aplicación sepa si la aplicación ha terminado
bien o no?

Se podría grabar un fichero con el valor, pero como es
para obtener desde ASP el código de retorno de una
aplicación en vb que puede ser llamada por varios
usuarios, lo mejor sería obtener dicho valor.

En c se haría con return en la función Main, pero en
vb????

Gracias y saludos.
a***@discussions.microsoft.com
2005-09-22 16:15:49 UTC
Permalink
Hola, he probado esto, y funciona, aunque tiene el
inconveniente de que "cierra tanto los procesos" que
cierra hasta el entorno del visual basic en las pruebas.
es normal?

Saludos
-----Mensaje original-----
Private Declare Sub ExitProcess Lib "kernel32" (ByVal
uExitCode As Long)
Pero asegúrate de hacerlo cuando ya estás preparado para
que finalice tu
aplicación (porque finalizará). Es decir, haz todo lo
que tengas que hacer
(cerrar conexiones a BD, descargar formularios, etc.)
ANTES de la llamada a
ExitProcess.
--
Saludos,
Alex
[MS-MVP Visual Basic]
Hola, estoy buscando información sobre algo que en
principio me parece muy simple, pero no he encontrado
nada en vb6, todo sale para vb.net.
¿Alguien sabría cómo hacer que una aplicación (.exe) de
vb6, devuelva un valor de retorno que pueda ser usado
para otra aplicación sepa si la aplicación ha terminado
bien o no?
Se podría grabar un fichero con el valor, pero como es
para obtener desde ASP el código de retorno de una
aplicación en vb que puede ser llamada por varios
usuarios, lo mejor sería obtener dicho valor.
En c se haría con return en la función Main, pero en
vb????
Gracias y saludos.
.
Lluís Franco
2005-09-22 15:02:16 UTC
Permalink
Hola,
Aparte de lo que te comenta Alex (que es la solución más aproximada a lo que
pides), una pregunta:

¿Esta aplicación debe tener interfaz visible? Si la respuesta es NO, podrías
crearte una DLL con una clase que contenga un método que devuelva el valor.
Así desde ASP la llamas con createobject y llamas al método en cuestión...

Saludos,
--
Lluís Franco i Montanyés
[MS-MVP-MCP Visual Basic]

This posting is provided "AS IS" with no warranties, and confers no rights.
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho

--
(Guía de netiquette del foro)
http://www.uyssoft.com/MSNews.aspx?sm=10
FIMARGE, S.A.
Principat d'Andorra
***@ODIO_EL_SPAMfimarge.ad
Tel.: +376 805 100
Fax: +376 824 500
Mi Perfil MVP en:
https://mvp.support.microsoft.com/profile=02aa1615-1a2f-4202-bc3f-aec297d967d2
Javier
2005-09-22 15:30:25 UTC
Permalink
Hola, no debe tener interfaz visible, pero ya probé a
crear la dll, ya que la clase imprime un datareport, pero
no funcionaba, se quedaba colgado justo en la instrucción
que imprimía el datareport. Realmente, esto es lo que más
me interesaba, pero no funcionó y por eso recurrí a esta
forma. Lo que hice fue crear una dll que al llamar a su
método imprimir lanzaba el datareport.

Si sabes cómo hacerlo como la dll (solucionando el
problema de impresión), te lo agradecería, ya que es
muchísimo mejor que llamar al ejecutable.

Mientras probaré lo que puso gorgorito. No lo entiendo
muy bien, y me parece muy raro que visual basic no pueda
devolver directamente un valor para indicar si la
aplicación se ejecutó bien o no.

Lo pruebo y os cuento.

Gracias.
-----Mensaje original-----
Hola,
Aparte de lo que te comenta Alex (que es la solución más
aproximada a lo que
¿Esta aplicación debe tener interfaz visible? Si la
respuesta es NO, podrías
crearte una DLL con una clase que contenga un método que
devuelva el valor.
Así desde ASP la llamas con createobject y llamas al
método en cuestión...
Saludos,
--
Lluís Franco i Montanyés
[MS-MVP-MCP Visual Basic]
This posting is provided "AS IS" with no warranties, and
confers no rights.
Este mensaje se proporciona "COMO ESTA" sin garantias y
no otorga ningun
derecho
--
(Guía de netiquette del foro)
http://www.uyssoft.com/MSNews.aspx?sm=10
FIMARGE, S.A.
Principat d'Andorra
Tel.: +376 805 100
Fax: +376 824 500
https://mvp.support.microsoft.com/profile=02aa1615-1a2f-
4202-bc3f-aec297d967d2
.
Alex Martínez
2005-09-22 16:00:07 UTC
Permalink
VB no puede (que yo sepa) devolver una valor. Pero puedes hacerlo como te he
propuesto antes.
Lo que te propone gorgorito (según entiendo) no tiene nada que ver con lo
que tú pides. Lo que hace es esperar a la finalización de una aplicación (la
busca con FindWindow, en un bucle que finaliza cuando ya no la localiza).
--
Saludos,
Alex
[MS-MVP Visual Basic]


"Javier" <***@discussions.microsoft.com> escribi� en el mensaje news:007201c5bf8a$8d8a72a0$***@phx.gbl...
Hola, no debe tener interfaz visible, pero ya probé a
crear la dll, ya que la clase imprime un datareport, pero
no funcionaba, se quedaba colgado justo en la instrucción
que imprimía el datareport. Realmente, esto es lo que más
me interesaba, pero no funcionó y por eso recurrí a esta
forma. Lo que hice fue crear una dll que al llamar a su
método imprimir lanzaba el datareport.

Si sabes cómo hacerlo como la dll (solucionando el
problema de impresión), te lo agradecería, ya que es
muchísimo mejor que llamar al ejecutable.

Mientras probaré lo que puso gorgorito. No lo entiendo
muy bien, y me parece muy raro que visual basic no pueda
devolver directamente un valor para indicar si la
aplicación se ejecutó bien o no.

Lo pruebo y os cuento.

Gracias.
-----Mensaje original-----
Hola,
Aparte de lo que te comenta Alex (que es la solución más
aproximada a lo que
¿Esta aplicación debe tener interfaz visible? Si la
respuesta es NO, podrías
crearte una DLL con una clase que contenga un método que
devuelva el valor.
Así desde ASP la llamas con createobject y llamas al
método en cuestión...
Saludos,
--
Lluís Franco i Montanyés
[MS-MVP-MCP Visual Basic]
This posting is provided "AS IS" with no warranties, and
confers no rights.
Este mensaje se proporciona "COMO ESTA" sin garantias y
no otorga ningun
derecho
--
(Guía de netiquette del foro)
http://www.uyssoft.com/MSNews.aspx?sm=10
FIMARGE, S.A.
Principat d'Andorra
Tel.: +376 805 100
Fax: +376 824 500
https://mvp.support.microsoft.com/profile=02aa1615-1a2f-
4202-bc3f-aec297d967d2
.
ξ∂I\⁄IβεLL Programmader
2005-10-03 21:59:07 UTC
Permalink
No seria la mejor forma pero.. Podrías cambiar la propiedad caption de frm…
con el valor es decir

Private Sub Form_load ()

Frm.caption = “caption inicial”

End if

Y asignarle el valor de retorno por ejemplo

If Second(time) = 6 Then frm.caption = “El valor de retorno es 6”

Y buscar la ventana con la Function de la API FindWindow

O también enviar el valor de retorno al portapapeles con el objeto Clipboard
o enviarlo a otra PC utilizando el control Winsock…..!



___________________________________________________________________
ξ∂I\⁄IβεLL Programmader… Inteligencia Artificial

Loading...