 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Aztaroth Invitado
|
Publicado: Jue 20 Nov, 2003 7:52 pm Asunto: Llamar aplicacion MSDos y esperar hasta q termine |
|
|
Si tengo una aplicacion para windows pero necesito ejecutar una aplicacion msdos el cual me genera un archivo en el directorio c:\temp\partinfo.txt
Hago la llamada al programa msdos de esta forma
TdrawingForm *forma = static_cast<TdrawingForm *>(ActiveMDIChild);
AnsiString cmd = "\\\\famsa\\sys\\apps\\af\\partinfo\\onepart2.exe \x22" + forma->fCaption + "\x22";
WinExec(cmd.c_str() , SW_HIDE);
//aqui quiero que mi programa hecho en windows se detenga hasta que el programa msdos termine para poder abrir el archivo generado "partinfo"
en una ventana MDIChild de mi aplicacion
partInfo = new TpartInfo(this);
partInfo->Caption = "Report for Part # " + forma->Caption;
partInfo->Load();
Alguien podria ayudarme con mi problema por favor. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 20 Nov, 2003 10:57 pm Asunto: |
|
|
Mira dentro del foro existe una funcion que espera a que ejecutes algo, y hasta que no termine, no continua con tu apliacion, si te interesa, te la pongo, este es el codigo, es decir en lugar de WinExec, que utlizas prueba con esta...
| Código: |
int WinExecAndWait32(AnsiString FileName, int Visibility)
{
char zAppName[512];
char zCurDir[255];
AnsiString WorkDir;
TStartupInfo StartupInfo;
TProcessInformation ProcessInfo;
strcpy(zAppName, FileName.c_str());
WorkDir = GetCurrentDir();
strcpy(zCurDir, WorkDir.c_str());
setmem(&StartupInfo, sizeof(StartupInfo), 0);
StartupInfo.cb = sizeof(StartupInfo);
StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow = Visibility;
if (!CreateProcess(NULL, zAppName, // pointer to command line string
NULL, // pointer to process security attributes
NULL, // pointer to thread security attributes
false, // handle inheritance flag
CREATE_NEW_CONSOLE | // creation flags
NORMAL_PRIORITY_CLASS,
NULL, // pointer to new environment block
NULL, // pointer to current directory name
&StartupInfo, // pointer to STARTUPINFO
&ProcessInfo))
{
return -1; // pointer to PROCESS_INF
}
else
{
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
DWORD ExitCode;
GetExitCodeProcess(ProcessInfo.hProcess, &ExitCode);
return ExitCode;
}
}
/******************************************/
|
_________________
 |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 20 Nov, 2003 11:00 pm Asunto: |
|
|
perdon este es el ejemplo para llamar a la funcion...
| Código: |
WinExecAndWait32("regsvr32 BDE\\BdeInst.dll", SW_SHOWDEFAULT ); |
_________________
 |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 21 Nov, 2003 7:16 am Asunto: |
|
|
Gracias por el Msg, personal, para eso estamos, para ayudarnos.. _________________
 |
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Mie 27 Sep, 2006 5:03 pm Asunto: |
|
|
Hola,
Estoy intentando utilizar esta funcion con el BDS2006 en WinXP y me da un par de errores en la funcion createprocess:
[C++ Error] Func_ficheros.cpp(157): E2034 Cannot convert 'Windows::_STARTUPINFOA *' to '_STARTUPINFOA *'
[C++ Error] Func_ficheros.cpp(157): E2342 Type mismatch in parameter 'lpStartupInfo' (wanted '_STARTUPINFOA *', got 'Windows::_STARTUPINFOA *')
He probado a incluir:
#include <winbase.h>
#include <windows.h>
pero sin resultados.
¿Como podria solucionarlo?.
Gracias y un saludo. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 27 Sep, 2006 8:01 pm Asunto: |
|
|
cambia la funcion por esta
| Código: | int __fastcall WinExecAndWait32(AnsiString FileName, int Visibility)
{
char zAppName[512];
char zCurDir[255];
AnsiString WorkDir;
// TStartupInfo StartupInfo; <--- OJO AQUI ESTA EL FALLO
LPSTARTUPINFO StartupInfo;
TProcessInformation ProcessInfo;
strcpy(zAppName, FileName.c_str());
WorkDir = ExtractFilePath(Application->ExeName);
strcpy(zCurDir, WorkDir.c_str());
setmem(&StartupInfo, sizeof(StartupInfo), 0);
StartupInfo->cb = sizeof(StartupInfo);
StartupInfo->dwFlags = STARTF_USESHOWWINDOW;
StartupInfo->wShowWindow = Visibility;
if (!CreateProcess(NULL, zAppName, // pointer to command line string
NULL, // pointer to process security attributes
NULL, // pointer to thread security attributes
false, // handle inheritance flag
CREATE_NEW_CONSOLE | // creation flags
NORMAL_PRIORITY_CLASS,
NULL, // pointer to new environment block
NULL, // pointer to current directory name
StartupInfo, // pointer to STARTUPINFO
&ProcessInfo))
{
return -1; // pointer to PROCESS_INF
}
else
{
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
DWORD ExitCode;
GetExitCodeProcess(ProcessInfo.hProcess, &ExitCode);
return ExitCode;
}
} |
_________________
 |
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Mie 27 Sep, 2006 9:03 pm Asunto: |
|
|
Hola,
Gracias por contestar Cesar.
Compilar compila bien pero en ejecucion falla en la linea:
StartupInfo->cb = sizeof(StartupInfo);
El error que da es este:
Project raised exception class EAccessViolation with message "Access violation at adress xxx in module .exe" write of adress 00000000
Supongo que faltara por ajustar algo mas.
Un saludo y gracias |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 27 Sep, 2006 10:32 pm Asunto: |
|
|
me paso de la misma manera al usar el BDS2006 pero me funciona correctamente _________________
 |
|
| Volver arriba |
|
 |
lcanovas Cdt

Registrado: 03 Dic 2005Mensajes: 3
|
Publicado: Mie 20 Ene, 2010 3:30 am Asunto: |
|
|
| kalux escribió: | Hola,
Gracias por contestar Cesar.
Compilar compila bien pero en ejecucion falla en la linea:
StartupInfo->cb = sizeof(StartupInfo);
El error que da es este:
Project raised exception class EAccessViolation with message "Access violation at adress xxx in module .exe" write of adress 00000000
Supongo que faltara por ajustar algo mas.
Un saludo y gracias |
Estoy trasladando a BDS2006 un viejo programa que utilizaba la función WinExecAndWait32 Después de modificar dicha función por el error [C++ Error] FPrincipal.cpp(300): E2034 Cannot convert 'Windows::_STARTUPINFOA *' to '_STARTUPINFOA *' con la propuesta de Cesar ahora me compila pero me da el mismo error que a ti en tiempo de ejecución. ¿Lograsteis resolver el problema? Gracias por vuestra atencións. |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mie 20 Ene, 2010 8:28 am Asunto: |
|
|
Prueba con esta corrección:
| Código: | int __fastcall WinExecAndWait32(AnsiString FileName, int Visibility)
{
char zAppName[512];
char zCurDir[255];
AnsiString WorkDir;
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProcessInfo;
strcpy(zAppName, FileName.c_str());
WorkDir = ExtractFilePath(Application->ExeName);
strcpy(zCurDir, WorkDir.c_str());
setmem(&StartupInfo, sizeof(StartupInfo), 0);
StartupInfo.cb = sizeof(StartupInfo);
StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow = Visibility;
if (!CreateProcess(NULL, zAppName, // pointer to command line string
NULL, // pointer to process security attributes
NULL, // pointer to thread security attributes
false, // handle inheritance flag
CREATE_NEW_CONSOLE | // creation flags
NORMAL_PRIORITY_CLASS,
NULL, // pointer to new environment block
NULL, // pointer to current directory name
&StartupInfo, // pointer to STARTUPINFO
&ProcessInfo))
{
return -1; // pointer to PROCESS_INF
}
else
{
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
DWORD ExitCode;
GetExitCodeProcess(ProcessInfo.hProcess, &ExitCode);
return ExitCode;
}
}
|
Saludos. |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|