#ifndef _IMAGE_IMAGERESOURCEDIRECTORYENTRY_HPP_ #define _IMAGE_IMAGERESOURCEDIRECTORYENTRY_HPP_ #ifndef _COMMON_WINDOWS_HPP_ #include #endif #ifndef _COMMON_STRING_HPP_ #include #endif #ifndef _IMAGE_IMAGERESOURCEDATAENTRY_HPP_ #include #endif #ifndef _IMAGE_IMAGERESOURCEDIRECTORY_HPP_ #include #endif #ifndef _IMAGE_STRPOINTER_HPP_ #include #endif template class SmartPointer; template class Block; class PureViewOfFile; class ImageResourceDirectoryEntry : public IMAGE_RESOURCE_DIRECTORY_ENTRY { public: ImageResourceDirectoryEntry(void); ImageResourceDirectoryEntry(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry); virtual ~ImageResourceDirectoryEntry(); ImageResourceDirectoryEntry &operator=(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry); WORD operator==(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry)const; operator IMAGE_RESOURCE_DIRECTORY_ENTRY &(void); operator String(void); const String &resName(void)const; DWORD offsetName(void)const; void offsetName(DWORD offsetName); DWORD nameIsString(void)const; void nameIsString(DWORD nameIsString); DWORD name(void)const; void name(DWORD name); DWORD resID(void)const; void resID(DWORD resID); DWORD offsetData(void)const; void offsetData(DWORD offsetData); DWORD offsetDirectory(void)const; void offsetDirectory(DWORD offsetDirectory); DWORD dataIsDirectory(void)const; void dataIsDirectory(DWORD dataIsDirectory); void read(DWORD resBase,DWORD deltaOffset,PureViewOfFile &pureView); ImageResourceDirectory &imageResourceDirectory(void); ImageResourceDataEntry &imageResourceDataEntry(void); private: void createResStrings(void); String getResource(DWORD resIndex); void setZero(void); String mResourceName; Block mResStrings; ImageResourceDirectory mImageResourceDirectory; ImageResourceDataEntry mImageResourceDataEntry; }; inline ImageResourceDirectoryEntry::ImageResourceDirectoryEntry(void) { setZero(); createResStrings(); } inline ImageResourceDirectoryEntry::ImageResourceDirectoryEntry(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry) { createResStrings(); *this=someImageResourceDirectoryEntry; } inline ImageResourceDirectoryEntry::~ImageResourceDirectoryEntry() { } inline ImageResourceDirectoryEntry &ImageResourceDirectoryEntry::operator=(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry) { mResourceName=someImageResourceDirectoryEntry.mResourceName; offsetName(someImageResourceDirectoryEntry.offsetName()); nameIsString(someImageResourceDirectoryEntry.nameIsString()); name(someImageResourceDirectoryEntry.name()); resID(someImageResourceDirectoryEntry.resID()); offsetData(someImageResourceDirectoryEntry.offsetData()); offsetDirectory(someImageResourceDirectoryEntry.offsetDirectory()); dataIsDirectory(someImageResourceDirectoryEntry.dataIsDirectory()); mImageResourceDirectory=someImageResourceDirectoryEntry.mImageResourceDirectory; mImageResourceDataEntry=someImageResourceDirectoryEntry.mImageResourceDataEntry; return *this; } inline WORD ImageResourceDirectoryEntry::operator==(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry)const { return (offsetName()==someImageResourceDirectoryEntry.offsetName()&& nameIsString()==someImageResourceDirectoryEntry.nameIsString()&& name()==someImageResourceDirectoryEntry.name()&& resID()==someImageResourceDirectoryEntry.resID()&& offsetData()==someImageResourceDirectoryEntry.offsetData()&& offsetDirectory()==someImageResourceDirectoryEntry.offsetDirectory()&& dataIsDirectory()==someImageResourceDirectoryEntry.dataIsDirectory()); } inline ImageResourceDirectoryEntry::operator IMAGE_RESOURCE_DIRECTORY_ENTRY &(void) { return *this; } inline DWORD ImageResourceDirectoryEntry::offsetName(void)const { #ifndef _MSC_VER return IMAGE_RESOURCE_DIRECTORY_ENTRY::u.s.NameOffset; #else return IMAGE_RESOURCE_DIRECTORY_ENTRY::NameOffset; #endif } inline void ImageResourceDirectoryEntry::offsetName(DWORD offsetName) { #ifndef _MSC_VER IMAGE_RESOURCE_DIRECTORY_ENTRY::u.s.NameOffset=offsetName; #else IMAGE_RESOURCE_DIRECTORY_ENTRY::NameOffset=offsetName; #endif } inline DWORD ImageResourceDirectoryEntry::nameIsString(void)const { #ifndef _MSC_VER return IMAGE_RESOURCE_DIRECTORY_ENTRY::u.s.NameIsString; #else return IMAGE_RESOURCE_DIRECTORY_ENTRY::NameIsString; #endif } inline void ImageResourceDirectoryEntry::nameIsString(DWORD nameIsString) { #ifndef _MSC_VER IMAGE_RESOURCE_DIRECTORY_ENTRY::u.s.NameIsString=nameIsString; #else IMAGE_RESOURCE_DIRECTORY_ENTRY::NameIsString=nameIsString; #endif } inline DWORD ImageResourceDirectoryEntry::name(void)const { #ifndef _MSC_VER return IMAGE_RESOURCE_DIRECTORY_ENTRY::u.Name; #else return IMAGE_RESOURCE_DIRECTORY_ENTRY::Name; #endif } inline void ImageResourceDirectoryEntry::name(DWORD name) { #ifndef _MSC_VER IMAGE_RESOURCE_DIRECTORY_ENTRY::u.Name=name; #else IMAGE_RESOURCE_DIRECTORY_ENTRY::Name=name; #endif } inline DWORD ImageResourceDirectoryEntry::resID(void)const { #ifndef _MSC_VER return IMAGE_RESOURCE_DIRECTORY_ENTRY::u.Id; #else return IMAGE_RESOURCE_DIRECTORY_ENTRY::Id; #endif } inline void ImageResourceDirectoryEntry::resID(DWORD resID) { #ifndef _MSC_VER IMAGE_RESOURCE_DIRECTORY_ENTRY::u.Id=resID; #else IMAGE_RESOURCE_DIRECTORY_ENTRY::Id=resID; #endif } inline DWORD ImageResourceDirectoryEntry::offsetData(void)const { #ifndef _MSC_VER return IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.OffsetToData; #else return IMAGE_RESOURCE_DIRECTORY_ENTRY::OffsetToData; #endif } inline void ImageResourceDirectoryEntry::offsetData(DWORD offsetData) { #ifndef _MSC_VER IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.OffsetToData=offsetData; #else IMAGE_RESOURCE_DIRECTORY_ENTRY::OffsetToData=offsetData; #endif } inline DWORD ImageResourceDirectoryEntry::offsetDirectory(void)const { #ifndef _MSC_VER return IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.s.OffsetToDirectory; #else return IMAGE_RESOURCE_DIRECTORY_ENTRY::OffsetToDirectory; #endif } inline void ImageResourceDirectoryEntry::offsetDirectory(DWORD offsetDirectory) { #ifndef _MSC_VER IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.s.OffsetToDirectory=offsetDirectory; #else IMAGE_RESOURCE_DIRECTORY_ENTRY::OffsetToDirectory=offsetDirectory; #endif } inline DWORD ImageResourceDirectoryEntry::dataIsDirectory(void)const { #ifndef _MSC_VER return IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.s.DataIsDirectory; #else return IMAGE_RESOURCE_DIRECTORY_ENTRY::DataIsDirectory; #endif } inline void ImageResourceDirectoryEntry::dataIsDirectory(DWORD dataIsDirectory) { #ifndef _MSC_VER IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.s.DataIsDirectory=dataIsDirectory; #else IMAGE_RESOURCE_DIRECTORY_ENTRY::DataIsDirectory=dataIsDirectory; #endif } inline const String &ImageResourceDirectoryEntry::resName(void)const { return mResourceName; } inline ImageResourceDirectory &ImageResourceDirectoryEntry::imageResourceDirectory(void) { return mImageResourceDirectory; } inline ImageResourceDataEntry &ImageResourceDirectoryEntry::imageResourceDataEntry(void) { return mImageResourceDataEntry; } inline void ImageResourceDirectoryEntry::setZero(void) { #ifndef _MSC_VER IMAGE_RESOURCE_DIRECTORY_ENTRY::u.Name=0; IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.OffsetToData=0; #else IMAGE_RESOURCE_DIRECTORY_ENTRY::Name=0; IMAGE_RESOURCE_DIRECTORY_ENTRY::OffsetToData=0; #endif } #endif