ปรับปรุงทรัพยากร

ตัวอย่างต่อไปนี้ในการคัดลอกทรัพยากรกล่องโต้ตอบจากหนึ่งแฟ้มปฏิบัติ มือ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 เมื่อต้องการข้อมูลทรัพยากร ใน 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 แล้ว ปิด 
if (!EndUpdateResource (hUpdateRes, FALSE)) { ErrorHandler ("ไม่สามารถเขียนการเปลี่ยนแปลงแฟ้มได้"); 
} / / Clean up 
if (!FreeLibrary(hExe)) { ErrorHandler ("อาจไม่ฟรีปฏิบัติได้"); 
}