עדכון משאבים

הדוגמה הבאה העתקת משאב תיבת הדו-שיח מתוך קובץ הפעלה אחת, יד.EXE, אחרת, כף הרגל.EXE, על-ידי ביצוע הפעולות הבאות:

  1. השתמש הפונקציה LoadLibrary לטעינת קובץ ההפעלה יד.EXE.
  2. השתמש בפונקציות FindResource ו- LoadResource כדי לאתר ולטעון את המשאב בתיבת הדו-שיח.
  3. השתמש בפונקציה LockResource כדי לאחזר מצביע נתוני משאבים בתיבת הדו-שיח.
  4. השתמש בפונקציה BeginUpdateResource כדי לפתוח את נקודת אחיזה עדכון על כף הרגל.EXE.
  5. השתמש בפונקציה UpdateResource כדי להעתיק את המשאב בתיבת הדו-שיח מהיד.EXE כדי כף הרגל.EXE.
  6. השתמש בפונקציה EndUpdateResource כדי להשלים את העדכון.

הקוד הבא מיישם את הפעולות הבאות:.

HRSRC hResLoad;     / / לטפל כדי לטעון משאב אחיזה hExe;        / / לטפל קיימים.קובץ EXE HRSRC hRes;         / / נקודת האחיזה/ptr. ל במיל. info. ב- hExe לטפל hUpdateRes;  / / עדכון משאבים אחיזה char * lpResLock;    / / מצביע משאב נתונים BOOL לתוצאה; 
 
/ / לטעון.קובץ EXE המכיל את תיבת הדו-שיח שברצונך להעתיק. 
hExe = LoadLibrary("hand.exe"); 
 
אם (hExe = = NULL) {ErrorHandler ("לא היתה אפשרות לטעון exe."); 
} / / לאתר את המשאב בתיבת הדו-שיח ב-.קובץ EXE. 
hRes = FindResource (hExe, "AboutBox", RT_DIALOG); 
 
אם (hRes = = NULL) {ErrorHandler ("לא היתה אפשרות לאתר בתיבת הדו-שיח."); 
} / / לטעון את תיבת הדו-שיח לזיכרון הכללית. 
hResLoad = LoadResource (hExe, hRes); 
 
אם (hResLoad = = NULL) {ErrorHandler ("לא היתה אפשרות לטעון תיבת דו-שיח."); 
} / / נעילת בתיבת הדו-שיח זיכרון גלובלי. 
lpResLock = LockResource(hRes); 
 
אם (lpResLock = = NULL) {ErrorHandler ("היתה תיבת הדו-שיח נעל לא."); 
} / / לפתוח את הקובץ שאליו ברצונך להוסיף את המשאב בתיבת הדו-שיח. 
hUpdateRes = BeginUpdateResource ("foot.exe", FALSE); 
 
אם (hUpdateRes = = NULL) {ErrorHandler ("אין אפשרות לפתוח קובץ לכתיבה."); 
} / / להוסיף את המשאב בתיבת הדו-שיח עדכון רשימה. 
התוצאה = UpdateResource (hUpdateRes, / / עדכון משאבים לטפל RT_DIALOG, / / לשנות משאבים בתיבת הדו-שיח "AboutBox", / / MAKELANGID (LANG_NEUTRAL, SUBLANG_NEUTRAL), שם של תיבת הדו-שיח / / נייטרלי לשפה
     lpResLock, / / ptr לשם פרטי משאב SizeofResource (hExe, hRes)); / / בגודל של פרטי משאב. 
 
אם (תוצאה = = FALSE) {ErrorHandler ("לא היתה אפשרות להוסיף משאב."); 
} / / לכתוב שינויים רגל.EXE ולאחר מכן סגור אותו. 
אם (!.EndUpdateResource (hUpdateRes, FALSE)) {ErrorHandler ("לא היתה אפשרות לכתוב קובץ שינויים."); 
} / / עד נקי. 
אם (!.FreeLibrary(hExe)) {ErrorHandler ("ואינם יכולים לשחרר קובץ הפעלה."); 
}