C/Visual C - lanzar un exe desde otro programa en c++

 
Vista:

lanzar un exe desde otro programa en c++

Publicado por leia (8 intervenciones) el 15/07/2004 08:20:34
Necesito saber como puedo hacer para que cuando pulso un botón en un interfaz gráfico (MFC AppWizard exe, hecho con Dialog Base) se ejecute un .exe que tengo guardado. Porque he intentado juntar todo el código, pero me da errores de linkado por el tema de las MFC o algo; ya se que la solución por la q he optado no es la mejor, pero en un apuro.........
Espero que alguien pueda ayudarme
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:lanzar un exe desde otro programa en c++

Publicado por josema (35 intervenciones) el 15/07/2004 13:22:43
Puedes utilizar ShellExecuteEx o puedes utilizar esta funcion que ejecuta un proceso y espera a que termine

BOOL EjecutarProcesoYEsperar ( char *pszExeName )
{
BOOL bReturn = TRUE;
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo;
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo ;

char szCmd[MAX_PATH];
sprintf ( szCmd, pszExeName );

if(CreateProcess(szCmd, NULL,
NULL,NULL,FALSE,0,NULL,
NULL,&StartupInfo,&ProcessInfo))
{
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
bReturn = TRUE;
}
else
{
MessageBox("error");
bReturn = FALSE;
}

return bReturn;

}
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:lanzar un exe desde otro programa en c++

Publicado por leia (8 intervenciones) el 30/07/2004 20:17:23
Siento contestar tan tarde, no me funcionaba otra cosa y no sabia que esto tp me iba, resulta que para poder utilizar la función EjecutarProcesoYEsperar tengo que hacer un include de winbase.h, pues resulta que al compilar me da 74 errores en el winbase.h, no se si será por algun tema de las MFC , en las ignore libraries he metido las que te indican en el help del visual:
libc.lib,libcmt.lib,msvcrt.lib,libcd.lib,libcmtd.lib

Ademas, otro problema q tengo, es q resulta que el ejecutable que tengo que lanzar desde el el otro programa, tiene que capturar eventos de una tableta digitalizadora, y supongo q eso complica la cosa.

He intentado lanzarlo con
system ("C:\.........\ejecutable.exe");
y resulta que algo hace, pero sale la pantalla negra de ms-dos me parece q escribe algo y se cierra super rapido, sin darme tiempo a escribir en la tableta, así q no me soluciona nada.

La funcion de EjecutarProcesoYEsperar tiene muy buena pinta pero no se como solucionar esos errores de syntaxis y demas que me da, pq salen pq hay algo mal en otro lado, pq yo no he tocado el winbase.h .

Espero q alguien pueda echarme un cable, gracias
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

compilar c++ desde g++ (se intenta)

Publicado por zeus (1 intervención) el 25/02/2023 23:20:54
estoy intentando usar el comando g++ desde codigo c++ y e usado windows.h y si va compila pero no funciona, no puedo pasar argumentos al programa[code
]#include<iostream>
#include<stdlib.h>
#include<fstream>
#include<windows.h>
#include<string>
#include<cstring>

//#include "SinNombre1.hpp"

using namespace std;

BOOL EjecutarProcesoYEsperar ( char *pszExeName );


int main(){
string a;
string b;
char* c;
char* d;
cout<<"introduce los datos"<<endl;
cin>>a;
cout<<"introduce el dato"<<endl;
cin>>b;
fstream file("bet.bat", ios_base::out);
if(file.fail()){
cout<<endl<<"hubo un error"<<endl;
system("pause");
exit(0);
}
file<<"g++ "<<a<<".cpp -o "<<b<<" & pause";
system("bet.bat");
for(int i=0;i<a.size();i++){
c[i] = a[i];
}

for(int i=0;i<b.size();i++){
d[i] = b[i];
}
char* h;
h = "r";
string g = "g++ ";
string o = ".cpp -o";

string preEnd = g+a+o+b;
char* end;

for(int i=0;i<preEnd.size();i++){
end[i] = preEnd[i];
}
system(end);
EjecutarProcesoYEsperar("g++");
return 0;
}

BOOL EjecutarProcesoYEsperar ( char *pszExeName )
{
BOOL bReturn = TRUE;
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo;
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo ;

char szCmd[MAX_PATH];
sprintf ( szCmd, pszExeName );

if(CreateProcess(szCmd, NULL,
NULL,NULL,FALSE,0,NULL,
NULL,&StartupInfo,&ProcessInfo))
{
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
bReturn = TRUE;
}
else
{
cout<<"error";
bReturn = FALSE;
}

return bReturn;

} [/code]
resultado del programa:
...
--------------------------------
Process exited after 4.011 seconds with return value 3221225477
Presione una tecla para continuar . . .
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