Newsgroup: it.comp.lang.delphi
Titolo: ShellExecute ... si può utilizzare direttamente la memoria ?

per inglobare un eseguibile all'interno del mio Programma.EXE 
(HDFTool.exe) ho creato il HDFTool.rc (HDF RCDATA hdftool.exe), 
compilato ottenendo HDFTool.res e inserito il caricamento del file 
durante la compilazione in modo da avere solo l'eseguibile e basta.
Per utilizzarlo estraggo il file dall'eseguibile quando mi occorre, lo 
utilizzo e poi lo cancello dalla directory (funziona ma mi piacerebbe 
evitare tutto questo utilizzando il file già presente in memoria 
all'interno dell'eseguibile, dovrebbe essere anche più veloce 
nell'esecuzione)
mi spiego meglio con due estratti dal mio programma:
//########### Attiva HDFTol 
####################################################
procedure TForm1.CreaFileHDFTool;
var
  fname: string;
  rStream: TResourceStream;
  fStream: TFileStream;
begin
    {this part extracts the file from exe}
        fname:='HDFTool.exe';
        rStream := TResourceStream.Create(hInstance, 'HDF', 
RT_RCDATA);
        try
        fStream := TFileStream.Create(fname, fmCreate);
          try
          fStream.CopyFrom(rStream, 0);
          finally
          fStream.Free;
          end;
        finally
        rStream.Free;
        end;
end;
_______________________________________________________________________
___
una volta estratto il file viene utilizzato:
_______________________________________________________________________
___
begin
.....;
 shellexecute (
    handle,
    'open',
    pchar('hdftool.exe'), // nome eseguibile
    pchar(' c -m=3 -id1=0016.0000 -id2=0016.0600 
'+'scriptors_mod_5400'), // parametri da passare all'eseguibile
    pchar(''),
    sw_hide);  // HIDE nasconde la finestra DOS di HDFTool
end;
......
cancellazione del file
ecc. ecc.
_______________________________________________________________________
___
piuttosto che estrarre il file si può lavorarci su direttamente ?
come ?
ovviamente un esempio (magari commentato) è più che bene accetto ;)
ps. ho voluto fare due post (questo e quello relativo ShellExecuteEx) 
in modo da non porre domande troppo complicate e confuse ... ma le due 
richieste si allacciano dato che utilizzerei le stesse (se possibile) 
anche su ShellExecuteEx
ps2. dato che ci sono ... il tutto vale anche per una libreria ? 
(intendo includerla all'interno dell'eseguibile principale)

Questo proprio non lo puoi fare (almeno con le API ufficiali microsoft - 
magari spulciando tra quelle non ufficiali si ma non saprei dove 
indirizzarti a vedere)

purtroppo mi sembra di aver proprio letto qualcosa del genere, durante 
la ricerca su come eseguire un comando dos esterno, ma non ritrovo più 
la fonte.
era abbastanza complicato per un "novizio" come me ed, al momento, non 
ho salvato il pezzo di codice :(
chissà se risalterà fuori

procedure UtilizzoRisorse;
var
hFind, hRes: THandle;
Resource: PChar;
begin
hFind:=FindResource(HInstance, 'IDRisorsa', 'TipoRisorsa');
if hFind<>0 then begin
hRes:=LoadResource(HInstance, hFind);
if hRes<>0 then begin
Resource := LockResource(hRes);
if Assigned(Resource) then
// operazioni sul file... che non so come fare :(
UnlockResource(hRes);
end;
FreeResource(hFind);
end;
end;
ho ritrovato quello che cercavo (almeno sembra) ... trova la risorsa,
la carica in memoria ma ... non so come vada usata ...

Si ok ma ora che l'hai caricata in memoria?
Windows non permette il lancio di un eseguibile da memoria!