L'aggiornamento delle risorse

Nell'esempio seguente viene copiato una risorsa di casella di dialogo da un file eseguibile, la mano.EXE, a un altro, il piede.EXE, attenendosi alla seguente procedura:

  1. Uso il funzione LoadLibrary per caricare il file eseguibile di mano.EXE.
  2. Utilizzare le funzioni FindResource e LoadResource per individuare e caricare la risorsa di casella di dialogo.
  3. Utilizzare la funzione LockResource per recuperare un puntatore ai dati di dialogo casella delle risorse.
  4. Utilizzare la funzione BeginUpdateResource per aprire un handle di aggiornamento al piede.EXE.
  5. Utilizzare la funzione UpdateResource per copiare la risorsa di casella di dialogo dalla mano.EXE al piede.EXE.
  6. Utilizzare la funzione EndUpdateResource per completare l'aggiornamento.

Il codice seguente implementa questi passaggi.

HResLoad HRSRC;     / / handle di risorsa caricato HANDLE hExe;        / / handle esistenti.File EXE HRSRC HRESULT;         / / handle/ptr. Info termoresistenza. nel hExe gestire hUpdateRes;  / / update char handle di risorsa * lpResLock;    / / puntatore al risultato di risorse dati BOOL; 
 
/ / Carica il.File EXE che contiene la finestra di dialogo che si desidera copiare. 
hExe = LoadLibrary("hand.exe"); 
 
Se (hExe = = NULL) {ErrorHandler ("Impossibile caricare exe."); 
} / / Individuare la risorsa di casella di dialogo nella.File EXE. 
HRESULT = FindResource (hExe, "AboutBox", RT_DIALOG); 
 
Se (HRESULT = = NULL) {ErrorHandler ("non poteva individuare nella finestra di dialogo."); 
} / / Carica nella finestra di dialogo in memoria globale. 
hResLoad = LoadResource (hExe, HRESULT); 
 
Se (hResLoad = = NULL) {ErrorHandler ("Impossibile caricare nella finestra di dialogo."); 
} / / Lock nella finestra di dialogo in memoria globale. 
lpResLock = LockResource(hRes); 
 
Se (lpResLock = = NULL) {ErrorHandler ("potrebbe non nella finestra di dialogo di blocco."); 
} / / Aprire il file a cui si desidera aggiungere la risorsa di casella di dialogo. 
hUpdateRes = BeginUpdateResource ("foot.exe", FALSE); 
 
Se (hUpdateRes = = NULL) {ErrorHandler ("Impossibile aprire il file per la scrittura."); 
} / / Aggiungi risorsa casella di dialogo all'elenco di aggiornamento. 
risultato = UpdateResource (hUpdateRes, / / aggiornamento risorsa handle RT_DIALOG, / / change risorsa finestra di dialogo casella "AboutBox", / / nella finestra di dialogo nome MAKELANGID (LANG_NEUTRAL, SUBLANG_NEUTRAL), / / neutrale lingua
     lpResLock, / / ptr info risorse SizeofResource (hExe, HRESULT)); / / dimensione di info risorse. 
 
Se (risultato = = FALSE) {ErrorHandler ("Impossibile aggiungere risorse."); 
} / / Write modifiche al piede.EXE e chiuderla. 
if (!.EndUpdateResource (hUpdateRes, FALSE)) {ErrorHandler ("Impossibile scrivere le modifiche al file."); 
} / / Clean up. 
if (!.FreeLibrary(hExe)) {ErrorHandler ("potrebbe non liberi eseguibile."); 
}