// ResFile.h #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #ifndef ResFileh #define ResFileh /* CResFile allows Read-Only File-like access to a DATA resource. From Visual Studio enter: [Insert Menu][Resource...][Import...][All Files (*.*)] DATA Then load the file you want to access as a Resource. DATA is a Predefined Resource Type and can easily be accessed using RT_RCDATA. Usage: char Buf[6]; CResFile ResFile(nID); ResFile.Read(Buf,6); ResFile.Rewind(); or CResFile ResFile; if(ResFile.Open(nID)) { ResFile.Read(Buf,6); ResFile.Close(); } */ class CResFile : public CMemFile { public: CResFile() {} virtual ~CResFile() {try{Close();}catch(...){}} CResFile (int nID) {VERIFY(Open(nID));} bool Open(int nID) { HMODULE hModule=AfxGetResourceHandle(); HRSRC hResInfo=FindResource(hModule, MAKEINTRESOURCE(nID), RT_RCDATA); if(!hResInfo) return false; HGLOBAL hResData=LoadResource(hModule,hResInfo); if(!hResData) return false; LPBYTE ptr=(LPBYTE)LockResource(hResData); //No need to unlock. DWORD Size=SizeofResource(hModule, hResInfo)-1; if(!ptr || !Size) return false; Attach(ptr,Size); return true; } void Close() {Detach();} void SetLength(DWORD dwNewLen) {TRACE("Attemping to SetLength on READ-ONLY CResFile!"); ASSERT(true);} void Write(const void* lpBuf, UINT nCount) {TRACE("Attemping to Write on READ-ONLY CResFile!" ); ASSERT(true);} }; #endif //ndef ResFileh