#include #include #include ImageResourceDirectoryEntry::operator String(void) { String resDirString; resDirString.reserve(256); ::sprintf(resDirString,"offName:%ld nameIsString:%ld name:%ld resID:%ld offData:%ld offDir:%ld dataIsDir:%ld", offsetName(),nameIsString(),name(),resID(),offsetData(),offsetDirectory(),dataIsDirectory()); return resDirString; } void ImageResourceDirectoryEntry::read(DWORD resBase,DWORD deltaOffset,PureViewOfFile &pureView) { pureView.read((char*)&((IMAGE_RESOURCE_DIRECTORY_ENTRY&)*this),sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)); pureView.push(); if(nameIsString()) { ImageResourceDirString resDirString; pureView.push(); pureView.seek(resBase+offsetName(),PureViewOfFile::SeekSet); resDirString.read(pureView); mResourceName=resDirString.name(); pureView.pop(); } if(dataIsDirectory()) { if(mResourceName.isNull())mResourceName=getResource(name()); // if(!mResourceName.isNull())::OutputDebugString(mResourceName+String("\n")); pureView.seek(resBase+offsetDirectory(),PureViewOfFile::SeekSet); mImageResourceDirectory.read(resBase,deltaOffset,pureView); } else { pureView.seek(resBase+offsetDirectory(),PureViewOfFile::SeekSet); mImageResourceDataEntry.read(deltaOffset,pureView); } pureView.pop(); } const String &ImageResourceDirectoryEntry::getResource(DWORD resIndex) { if(resIndex>=mResStrings.size())return mResStrings[0]; return mResStrings[resIndex]; } void ImageResourceDirectoryEntry::createResStrings(void) { mResStrings.insert(&String("???_0")); mResStrings.insert(&String("CURSOR")); mResStrings.insert(&String("BITMAP")); mResStrings.insert(&String("ICON")); mResStrings.insert(&String("MENU")); mResStrings.insert(&String("DIALOG")); mResStrings.insert(&String("STRING")); mResStrings.insert(&String("FONTDIR")); mResStrings.insert(&String("FONT")); mResStrings.insert(&String("ACCELERATORS")); mResStrings.insert(&String("RCDATA")); mResStrings.insert(&String("MESSAGETABLE")); mResStrings.insert(&String("GROUP_CURSOR")); mResStrings.insert(&String("???_13")); mResStrings.insert(&String("GROUP_ICON")); mResStrings.insert(&String("???_15")); mResStrings.insert(&String("VERSION")); }