Newsgroup: it.comp.programmare.win32
Titolo: Avviare un file exe in un programma c sdk

Ciao a tutti! Premettendo che non sono molto esperto in questo tipo di
programmazione vorrei saper come posso avviare un file exe, che è
dentro il programma c sdk, quando avvio il programma stesso. Il file
exe l'ho già inserito nel programma come 'resource' rinominandolo come
.ico; può essere un inizio? Grazie

 .ico;
perche hai fatto cosi??
lo puoi inserire come risorsa binaria con un nome a tua scelta, use le 
api per manipolare le risorse per salvarlo come file da qualche parte e 
lo avvii, niente di trascedentale
ciao

 lo puoi inserire come risorsa binaria
Scusa l'informazione ma che cosa intendi per risorsa binaria?

 Scusa l'informazione ma che cosa intendi per risorsa binaria?
oltre alle normali risorse tipo menu, dialoghi, immagini ecc. puoi 
inserire praticamente qualsiasi cosa
le ho chiamata binarie perche con il visual studio queste risorse 
vengono mostrate in modo non "formattato", come quando apri un exe con 
un editor di testo, vedi i vari byte in esadecimale
sono risorse ne piu e ne meno come le altre solo che lo scopo e l'uso 
non è predefinito, lo conosci solo tu
ciao

> Scusa l'informazione ma che cosa intendi per risorsa binaria?
Come già detto da Peppino Eucrepitio è un file che si può includere
nel progetto. Come caso concreto si può prendere in considerazione
l'uso di un'animazione (avi):
Vedi
http://www.functionx.com/visualc/controls/animation.htm
in cui appunto...
"[...] After creating the control, you must provide a video to play. This
is done by opening a video file using the CAnimateCtrl::Open() method. It
is overloaded with two versions as follows: 
 
BOOL Open(LPCTSTR lpszFileName);
BOOL Open(UINT nID);
The first version expects the path of the video file. Alternatively, you
can first add the file as a resource to your project and use its
identifier as argument to the second version. Here is an example: [...]"
 
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Scusa l'informazione ma che cosa intendi per risorsa binaria?
Intende una risorsa di tipo "RCDATA".  Generica, per intenderci.
Tu vuoi includere un file .exe in un tuo file, per poi lanciarlo a
run-time.  Bene, puoi far sì che il file .exe della tua applicazione
lo "incubi" come risorsa.
Costruisci un file .rc che contenga una riga del tipo:
MYRESOURCEID RCDATA "miofile.exe"
Dove MYRESOURCEID sarà definito in un file myres.h come:
#define MYRESOURCEID 1000  
/* il valore 1000 è arbitrario, puoi metterci quello che vuoi */
Poi nel tuo eseguibile scrivi qualcosa del tipo (il seguente è codice
per MinGW):
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <shellapi.h>
#include "myres.h"
int main()
{
    HGLOBAL resHandle = NULL;
    HRSRC  res;
    char *resData;
    DWORD resSize;
    FILE *fp;
    res = FindResource(0, MAKEINTRESOURCE(MYRESOURCEID), RT_RCDATA);
    if (!res)
       fprintf(stderr, "FindResource() fallita!");
    else {
      resHandle = LoadResource(0, res);
      if (!resHandle)
         fprintf(stderr, "LoadResource() fallita!");               
      else {
        resData = (char*)LockResource(resHandle);
        resSize = SizeofResource(NULL, res);
 
        if ((fp=fopen("myexe.exe", "wb"))){ 
           int i;    
           for (i=0; i<resSize; i++)
               fputc(resData[i], fp);
           fclose(fp);
           ShellExecute(0, "open", "myexe.exe", 0, 0, SW_SHOWNORMAL);
        }
        else
          fprintf(stderr, "fopen() fallita!");               
      }
    }
    return 0;
}
Tieni presente che questo è l'esempio nudo e crudo.  In dipendenza dal
compilatore che utilizzi, le operazioni possono essere agevolate.
In generale, quello che succede è che durante le fasi di generazione
del codice, il sistema raccoglie i file .rc, li dà in pasto ad un
compilatore di risorse (nel caso di MinGW si tratta di windres, ma se
ne può usare uno qualsiasi, purché compatibile con il formato del file
oggetto gestito dal linker) e il compilatore di risorse tira fuori un
.res.  Quest'ultimo viene linkato al file .exe generato dal linker e
sarà gestibile a run-time con le API FindResource() / LoadResource() /
LockResource(), etc... tutte ampiamente documentate su MSDN.