純文字檔,每行定義一個資源:
資源識別碼 資源類型 檔案路徑
S1 WAV wav1.wav
C1 CURSOR cursor1.cur
C2 CURSOR cursor2.cur
I1 ICON icon1.ico
I2 ICON icon2.ico
I3 ICON icon3.ico
UNZIP EXEFILE pkunzip.exe
常用類型:BITMAP, ICON, CURSOR, WAV, AVI, EXEFILE (自訂類型,需自行解析)、RT_RCDATA (原始資料)。
.rc 加入專案 (Project → Add to Project),IDE 自動調用 brcc32.exe 編譯為 .res 並連結。brcc32 src1.rc src1.res,再用 #pragma resource "src1.res" 連結。Application->Icon->Handle = LoadIcon(HInstance, "I1"); // 或 MAKEINTRESOURCE(I1)
Form1->Icon->Handle = LoadIcon(HInstance, "I2");
Screen->Cursors[crMyCursor] = LoadCursor(HInstance, "C1");
Button1->Cursor = crMyCursor;
// 同步播放
sndPlaySound(MAKEINTRESOURCE("S1"), SND_RESOURCE | SND_SYNC);
// 非同步
sndPlaySound(MAKEINTRESOURCE("S1"), SND_RESOURCE | SND_ASYNC);
TAnimate *ani = new TAnimate(this);
ani->Parent = this;
ani->ResHandle = HInstance;
ani->ResName = "MY_AVI";
ani->Open();
ani->Play(0, -1, -1); // 循環播放
將獨立 EXE (如解壓縮工具) 嵌入自家 EXE,運行時釋放到暫存目錄再執行:
HRSRC hRes = FindResource(HInstance, "UNZIP", "EXEFILE");
HGLOBAL hGlob = LoadResource(HInstance, hRes);
void *pData = LockResource(hGlob);
DWORD size = SizeofResource(HInstance, hRes);
// 寫入暫存檔
AnsiString tmp = GetTempPath() + "unzip.exe";
TFileStream *fs = new TFileStream(tmp, fmCreate);
fs->Write(pData, size);
delete fs;
// 執行
WinExec(tmp.c_str(), SW_SHOW);