Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-04-2005
erika.martinez erika.martinez is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires - Argentina
Posts: 18
Poder: 0
erika.martinez Va por buen camino
Usar una aplicación externa desde Delphi

Hola a todos, ¿qué tal? Quisiera saber si se puede desde Delphi utilizar un ejecutable. Yo tendría que enviar datos desde Delphi a ese ejecutable y recibir los resultados en Delphi. Estuve buscando información en Internet acerca de como hacer esto y no encontré nada. Si alguien pudiera decirme donde puedo leer al respecto, me será de mucha utilidad.
Desde ya muchas gracias y saludos a todos.
Erika
Responder Con Cita
  #2  
Antiguo 08-04-2005
JOSEPE JOSEPE is offline
Miembro
 
Registrado: feb 2005
Posts: 45
Poder: 0
JOSEPE Va por buen camino
Lo primero es saber si tienes alguna forma de comunicarte con la aplicacion servidora (el ejecutable). Si es un programa conocido, por lo general permiten su manejo via COM (por ejemplo M$ Office desde delphi puedes usarlos los componentes de la paleta SERVERS). Si es un programa hecho por ti estonces tienes COM, DDE, archivos mapeados en memoria, etc. Danos mas info de cual es el programa que deseas usar y tal vez podamos ayudarte mas precisamente.

Salu2
JOSEPE
Lima-Peru
Responder Con Cita
  #3  
Antiguo 08-04-2005
erika.martinez erika.martinez is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires - Argentina
Posts: 18
Poder: 0
erika.martinez Va por buen camino
El programa es BLAST, un programa que se usa en el proyecto genoma humano y que sirve para comparar secuencias de nucleótidos. Este programa tiene dos versiones, una que se ejecuta desde la web, y otra local que se ejecuta en DOS.
Erika
Responder Con Cita
  #4  
Antiguo 08-04-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Hola Erika.

Buscá en la documentación del programa si este dispone de algun API (Application Program Interface) que te ptermita manipularlo de manera que podas interactuar programáticamente con él.

Una búsqueda en google por los términos blast api devuelve un sin fin de resultados (unos 113,000) que me hacen pensar que hay algo bueno por este lado. Es de especializar mas la búsqueda para llegar a donde pretendes, pero dado que no tengo idea del uso del programa o de quien lo fabrica, pues es una tarea que he dejado para vos.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 08-04-2005
cuburu cuburu is offline
Miembro
 
Registrado: mar 2005
Posts: 63
Poder: 20
cuburu Va por buen camino
Se me ocurre que quizas podrías utilizar la funcion:

WinExec(PChar('Direccon del ejecutable + parametros'), Tipo de visualización)

Podrias utilizar ésta funcion para ejecutar el programa binario en modo DOS. Además puedes colocar parametros al mandar llamar el binario para que te despliegue la información que deseas. Como por ejemplo:

WinExec(PChar('C:\windows\notepad File.txt', SW_SHOWNORMAL);

abre el block de notas y te crea un archivo llamado File de extensión "txt". Podrias utilizar algo parecido, el problema seria en como podrias capturar los resultados que te despliega el sistema e importarlos a Delphi.

No soy un experto en esto pero te dejo una parte de una posible solución.
Suerte y si lo puedes hacer nos dices como te fue y como le hiciste jaja.
Responder Con Cita
  #6  
Antiguo 13-04-2005
erika.martinez erika.martinez is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires - Argentina
Posts: 18
Poder: 0
erika.martinez Va por buen camino
Talking La solución

Hola, al fin conseguí resolverlo, por si a alguien le sirve les cuento como hice. La aplicación que yo necesito ejecutar desde Delphi, se ejecuta bajo Windows a través de un prompt de DOS, creo que en Linux y Unix es distinto.
Lo que hice fue usar la función ExecuteFile, que está declarada en la unit FmxUtils, que se encuentra en Delphi/Demos/Doc/Filmanex, esta función hace uso de la función ShellExecute de la API de Windows:

ExecuteFile(const FileName, Params, DefaultDir: string; ShowCmd: Integer): THandle;

Bueno, como mi aplicación se ejecuta mediante un prompt de DOS, lo que hice fue crear un archivo bat con las instrucciones para DOS, y finalmente hago uso de la función dicha:

ExecuteFile('c:\mybat.bat', '', '', SW_SHOWNORMAL);

En internet hay varios ejemplos de como utilizar esta función con ditintas aplicaciones.

Bueno, espero que a alguien le sirva esto.

Saludos

Erika
Responder Con Cita
  #7  
Antiguo 13-04-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Hola Erika.

Cita:
Empezado por erika.martinez
Hola, al fin conseguí resolverlo
Me alegra que tu problema se haya resuelto y mas que hayas decidido compartirlo.

Cita:
Empezado por erika.martinez
Yo tendría que enviar datos desde Delphi a ese ejecutable y recibir los resultados en Delphi
Me quedé intrigado sobre como resolviste esta parte... ¿es posible que lo compartas también?

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 13-04-2005
erika.martinez erika.martinez is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires - Argentina
Posts: 18
Poder: 0
erika.martinez Va por buen camino
Te cuento, los datos los envio a través del archivo bat que yo cree, que es el siguiente:

C:\
cd..
cd ncbi-blast\sequence
blastall -p blastx -d globins -i fugu_globin>resultados_test

donde en la última línea, blastall es el programa que yo quiero ejecutar, blastx vendría siendo la sentencia dentro de ese programa que quiero ejecutar, globins es la base de datos que le paso y fugu_globin mi entrada, y guardo los resultados en el archivo resultados_test. Esto yo lo hice con un archivo bat porque se ejecuta en DOS. Si te fijás en la función ExecuteFile:

ExecuteFile(const FileName, Params, DefaultDir: string; ShowCmd: Integer): THandle;

Params son los parámetros de entrada - salida del programa que vos querés ejecutar, pero es necesario que el programa a ejecutar tenga parámetros de salida para poder obtener una salida, en mi caso, si yo hubiera podido ejecutar directamente el programa en vez de usar un archivo bat, habria sido:

ExecuteFile('blastall', '-p blastx -d globins -i fugu_globin>resultados_test', 'c:/ncbi-blast\sequence' , SW_SHOWNORMAL)

pero esto Delphi no me lo aceptaba, no sé porque.

La cuestión es que los datos que yo necesito recibir a Delphi, en realidad están guardados en un archivo (resultados_test), que tengo que leer desde Delphi.

Espero que se haya entendido.

Saludos

Erika
Responder Con Cita
  #9  
Antiguo 14-04-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Hola Erika.

Cita:
Empezado por erika.martinez
blastall -p blastx -d globins -i fugu_globin>resultados_test
Veo que el programa aceptaba parámetros, y que la salida es escrita en la consola. Esta información al inicio nos hubiera evitado unos cuantos rodeos...

Cita:
Empezado por erika.martinez
Params son los parámetros de entrada - salida
Params son los parámetros de entrada.... no existe tal cosa como los parámetros de salida

Cita:
Empezado por erika.martinez
pero es necesario que el programa a ejecutar tenga parámetros de salida para poder obtener una salida
Estas segura de lo que estas diciendo... ya me estas haciendo dudar...

Cita:
Empezado por erika.martinez
yo hubiera podido ejecutar directamente el programa en vez de usar un archivo bat, habria sido:

ExecuteFile('blastall', '-p blastx -d globins -i fugu_globin>resultados_test', 'c:/ncbi-blast\sequence' , SW_SHOWNORMAL)

pero esto Delphi no me lo aceptaba, no sé porque.
Es que quien hace la redirección indicada por el ">" la realiza el interprete de comandos y no el programa que ejecutas. Pero esto, si queres dejar de depender del .bat tiene una solución: Invocar al interprete de comandos.

Ahora no recuerdo exactamente el parámetro, pero creo que era /C

algo como:
Código Delphi [-]
ShellExecute(Application.Handle, 
  pchar('open'), 
  pchar('c:\windows\system32\cmd.exe'), 
  pchar('/c blastall -p blastx -d globins -i fugu_globin>resultados_test'),
  pchar('c:\ncbi-blast\sequence'));

debiera funcionar. Date cuenta que ahora mandamos a ejecutar el interprete de comandos y via parámetros le indicamos cual es el comando a ejecutar: en este caso, el blastall mas la lista de parámetros y por último la redirección. Esto es equivalente a escribir la cadena en una sesion del interprete.

Ojo, que el interprete de comandos es mejor leerlo de la variable de entorno COMSPEC, puesto que su ubicación y nombre varia entre instalaciones y versiones de windows.

Otra posible solución es mediante un PIPE del sistema redireccionar directamente la salida del programa y recogerla en un TStrings, por ejemplo. Para ello te recomiendo consultar los mensajes en este mismo foro y la ayuda de la función CreateProccess del api de windows.

Ambas soluciones son mas complicadas en principio que el bat, pero te dan independencia de este.

hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #10  
Antiguo 14-04-2005
erika.martinez erika.martinez is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires - Argentina
Posts: 18
Poder: 0
erika.martinez Va por buen camino
Wink

Juan gracias por tus aportes, voy a usarlos porque me parece que voy a tener que usar directamente la función ShellExecute ya que necesito saber cuando termina de ejecutarse el otro programa para poder leer el archivo que genera.

Con respecto a los parámetros de salida tenés toda la razón, yo me expresé mal , en realidad yo necesitaba alguna forma de poder acceder a los resultados de la otra aplicación desde Delphi y consideré "parámetro de salida" como el archivo que genera la otra aplicación. Pero, como vos decís, no sé si desde Delphi podés recibir parámetros de otra aplicación.

Bueno, otra vez gracias por todo y perdón por no haberme expresado bien.

Saludos

Erika
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:26:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi