none
Ejecutar programa en C++ RRS feed

  • Pregunta

  • Hola,

    necesito abrir un archivo .exe dentro de un programa c++. El problema es que si uso el método "system("dirección"), el programa principal c++ se queda parado hasta que cierro el ejecutable abierto por system.

    Es decir, el programa principal tiene que abrir un archivo .exe y funcionar los dos en paralelo (sin que el programa principal se quede esperando al cierre del secundario). He buscado en la red, y he encontrado la siguiente método:

    ShellExecute ( NULL, "open", "C:\\3D.exe", NULL, NULL, SW_SHOW );	


    El problema es que me salen dos errores.

    1> error LNK2028: se hace referencia al símbolo (token) sin resolver (0A000022) "extern "C" struct HINSTANCE__ * __stdcall ShellExecuteA(struct HWND__ *,char const *,char const *,char const *,char const *,int)" (?ShellExecuteA@@$$J224YGPAUHINSTANCE__@@PAUHWND__@@PBD111H@Z) en la función "private: void __clrcall Simulador_Mach3::Form1::button2_Click(class System::Object ^,class System::EventArgs ^)" (?button2_Click@Form1@Simulador_Mach3@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)

    1>error LNK2019: símbolo externo "extern "C" struct HINSTANCE__ * __stdcall ShellExecuteA(struct HWND__ *,char const *,char const *,char const *,char const *,int)" (?ShellExecuteA@@$$J224YGPAUHINSTANCE__@@PAUHWND__@@PBD111H@Z) sin resolver al que se hace referencia en la función "private: void __clrcall Simulador_Mach3::Form1::button2_Click(class System::Object ^,class System::EventArgs ^)" (?button2_Click@Form1@Simulador_Mach3@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)

    Gracias

    martes, 24 de julio de 2012 16:19

Respuestas

  • El siguiente tip debería resolver su problema y además darle el conocimiento para evadirlo en un futuro.

    El proceso de crear un binario (.exe, .dll, etc.) involucra dos pasos:  Compilar y vincular (compiling and linking).  Los errores de compilación empiezan con C; los de vinculación con LNK.

    Cuando la vinculación no encuentra la definición de alguna función se genera el error LNK2019 como le está pasando.  Eso es porque necesita decirle al linker dónde encontrar la definición.  En este caso el problema es ShellExecute().  Busque ShellExecute en MSDN.  Encontrará está página:  http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx.  Al fondo encontrará dos piezas importantes de información:  El Header y Library.  El Header es necesario para compilar, mientras que el Library es necesario para vincular.

    Los headers se agregan con #include's; los Library se agregan en las propiedades del linker en el proyecto, o bien por código en el CPP que lo necesita:

    #pragma comment(lib, "shell32.lib")



    Jose R. MCP
    Code Samples

    martes, 24 de julio de 2012 16:39
    Moderador

Todas las respuestas

  • El siguiente tip debería resolver su problema y además darle el conocimiento para evadirlo en un futuro.

    El proceso de crear un binario (.exe, .dll, etc.) involucra dos pasos:  Compilar y vincular (compiling and linking).  Los errores de compilación empiezan con C; los de vinculación con LNK.

    Cuando la vinculación no encuentra la definición de alguna función se genera el error LNK2019 como le está pasando.  Eso es porque necesita decirle al linker dónde encontrar la definición.  En este caso el problema es ShellExecute().  Busque ShellExecute en MSDN.  Encontrará está página:  http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx.  Al fondo encontrará dos piezas importantes de información:  El Header y Library.  El Header es necesario para compilar, mientras que el Library es necesario para vincular.

    Los headers se agregan con #include's; los Library se agregan en las propiedades del linker en el proyecto, o bien por código en el CPP que lo necesita:

    #pragma comment(lib, "shell32.lib")



    Jose R. MCP
    Code Samples

    martes, 24 de julio de 2012 16:39
    Moderador
  • Gracias, me estoy acostumbrando a leer y entender las APIs de Microsoft. Estoy empezando a hacer proyectos un poco serios y estas cabeceras que me dices me ayudaran mucho para los siguientes pasos del proyecto.

    Muchas gracias

    martes, 24 de julio de 2012 17:36