Files
Work/image/RESDRSTR.HPP
2024-08-07 09:16:27 -04:00

95 lines
2.3 KiB
C++

#ifndef _IMAGE_IMAGERESOURCEDIRSTRING_HPP_
#define _IMAGE_IMAGERESOURCEDIRSTRING_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _COMMON_PUREVIEWOFFILE_HPP_
#include <common/pview.hpp>
#endif
#ifndef _COMMON_WINNLS_HPP_
#include <common/winnls.hpp>
#endif
class ImageResourceDirString : private IMAGE_RESOURCE_DIR_STRING_U
{
public:
ImageResourceDirString(void);
virtual ~ImageResourceDirString();
operator IMAGE_RESOURCE_DIR_STRING_U &(void);
String name(void)const;
void read(PureViewOfFile &pureView);
private:
WORD length(void)const;
ImageResourceDirString(const ImageResourceDirString &someImageResourceDirString);
ImageResourceDirString &operator=(const ImageResourceDirString &imageResourceDirString);
void zeroInit(void);
String mResourceName;
};
inline
ImageResourceDirString::ImageResourceDirString(void)
{
zeroInit();
}
inline
ImageResourceDirString::ImageResourceDirString(const ImageResourceDirString &someImageResourceDirString)
{
*this=someImageResourceDirString;
}
inline
ImageResourceDirString::~ImageResourceDirString()
{
}
inline
ImageResourceDirString &ImageResourceDirString::operator=(const ImageResourceDirString &/*imageResourceDirString*/)
{
return *this;
}
inline
ImageResourceDirString::operator IMAGE_RESOURCE_DIR_STRING_U &(void)
{
return *this;
}
inline
WORD ImageResourceDirString::length(void)const
{
return IMAGE_RESOURCE_DIR_STRING_U::Length;
}
inline
String ImageResourceDirString::name(void)const
{
return mResourceName;
}
inline
void ImageResourceDirString::read(PureViewOfFile &pureView)
{
WCHAR wszBuffer[String::MaxString];
pureView.push();
::memset(wszBuffer,0,sizeof(wszBuffer));
mResourceName.reserve(String::MaxString);
pureView.read((char*)&((IMAGE_RESOURCE_DIR_STRING_U&)*this),sizeof(IMAGE_RESOURCE_DIR_STRING_U));
wszBuffer[0]=IMAGE_RESOURCE_DIR_STRING_U::NameString[0];
pureView.read((char*)(wszBuffer+1),length()*sizeof(WCHAR));
::WideCharToMultiByte(CP_ACP,0,wszBuffer,IMAGE_RESOURCE_DIR_STRING_U::Length,(LPSTR)mResourceName,String::MaxString,0,0);
pureView.pop();
}
inline
void ImageResourceDirString::zeroInit(void)
{
IMAGE_RESOURCE_DIR_STRING_U::Length=0;
IMAGE_RESOURCE_DIR_STRING_U::NameString[0]=0;
}
#endif