PEAddResource now supports the res: protocol
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@7301 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
aca76bc307
commit
1531c8e23e
9 changed files with 267 additions and 29 deletions
|
@ -129,6 +129,11 @@ public:
|
|||
// On POSIX+Unicode GetResource(RT_VERSION,..) is not TCHAR nor WINWCHAR, it is WCHAR/UINT16 (MAKEINTRESOURCEW).
|
||||
// If it passes IS_INTRESOURCE we must allow it.
|
||||
// Use TCHAR* for real strings. If you need to pass in a WINWCHAR*, make GetResourceW public...
|
||||
template<class T> bool UpdateResourceFromExternal(const T*Type, WORD Name, LANGID Lang, const TCHAR*File, TYPEMANIPULATION Manip = TM_AUTO)
|
||||
{
|
||||
if (sizeof(T) != sizeof(TCHAR) && !IS_INTRESOURCE(Type)) { assert(IS_INTRESOURCE(Type)); return false; }
|
||||
return UpdateResourceFromExternalT((const TCHAR*) Type, Name, Lang, File, Manip);
|
||||
}
|
||||
template<class T> bool UpdateResource(const T*Type, WORD Name, LANGID Lang, BYTE*Data, DWORD Size, TYPEMANIPULATION Manip = TM_RAW)
|
||||
{
|
||||
if (sizeof(T) != sizeof(TCHAR) && !IS_INTRESOURCE(Type)) { assert(IS_INTRESOURCE(Type)); return false; }
|
||||
|
@ -169,7 +174,13 @@ public:
|
|||
if (sizeof(T) != sizeof(TCHAR) && !IS_INTRESOURCE(Type)) { assert(IS_INTRESOURCE(Type)); return NULL; }
|
||||
return GetFirstResourceT((const TCHAR*) Type, cbData);
|
||||
}
|
||||
template<class T> BYTE* ExtractIcoCur(const T*Type, WORD Name, LANGID Lang, size_t&cbData)
|
||||
{
|
||||
if (sizeof(T) != sizeof(TCHAR) && !IS_INTRESOURCE(Type)) { assert(IS_INTRESOURCE(Type)); return NULL; }
|
||||
return ExtractIcoCurT((const TCHAR*) Type, Name, Lang, cbData);
|
||||
}
|
||||
|
||||
bool UpdateResourceFromExternalT(const TCHAR* Type, WORD Name, LANGID Lang, const TCHAR*File, TYPEMANIPULATION Manip = TM_AUTO);
|
||||
bool UpdateResourceT (const TCHAR* szType, WORD szName, LANGID wLanguage, BYTE* lpData, DWORD dwSize, TYPEMANIPULATION Manip = TM_RAW);
|
||||
bool UpdateResourceT (const TCHAR* szType, WORD szName, LANGID wLanguage, FILE*Data, TYPEMANIPULATION Manip = TM_AUTO);
|
||||
bool DeleteResourceT (const TCHAR* szType, WORD szName, LANGID wLanguage, TYPEMANIPULATION Manip = TM_RAW);
|
||||
|
@ -178,6 +189,7 @@ public:
|
|||
DWORD GetResourceOffsetT(const TCHAR* szType, WORD szName, LANGID wLanguage);
|
||||
bool ResourceExistsT (const TCHAR* szType, WORD szName, LANGID wLanguage, LANGID*pFoundLanguage = 0);
|
||||
BYTE* GetFirstResourceT (const TCHAR* szType, size_t&cbData);
|
||||
BYTE* ExtractIcoCurT (const TCHAR* szType, WORD szName, LANGID wLanguage, size_t&cbData);
|
||||
void FreeResource(BYTE* pbResource);
|
||||
|
||||
// The section name must be in ASCII.
|
||||
|
@ -200,6 +212,7 @@ public:
|
|||
static LANGID ParseResourceLangString(const TCHAR*String);
|
||||
static LANGID ParseResourceTypeNameLangString(const TCHAR**Type, const TCHAR**Name, const TCHAR*Lang);
|
||||
static bool EditorSupportsStringNames() { return false; } // UpdateResource/GetResource do not support string names (yet)
|
||||
static bool EditorSupportsCursorPng() { return false; }
|
||||
|
||||
private:
|
||||
bool UpdateResourceW (const WINWCHAR* szType, WINWCHAR* szName, LANGID wLanguage, BYTE* lpData, DWORD dwSize, TYPEMANIPULATION Manip = TM_RAW);
|
||||
|
@ -207,12 +220,14 @@ private:
|
|||
int GetResourceSizeW (const WINWCHAR* szType, WINWCHAR* szName, LANGID wLanguage);
|
||||
DWORD GetResourceOffsetW(const WINWCHAR* szType, WINWCHAR* szName, LANGID wLanguage);
|
||||
BYTE* GetFirstResourceW (const WINWCHAR* szType, size_t&cbData);
|
||||
BYTE* ExtractIcoCurW (const WINWCHAR* szType, WINWCHAR* szName, LANGID wLanguage, size_t&cbData);
|
||||
CResourceDataEntry* FindResource(const WINWCHAR* Type, const WINWCHAR* Name, LANGID Language);
|
||||
CResourceDirectoryEntry* FindResourceLanguageDirEntryW(const WINWCHAR* Type, const WINWCHAR* Name, LANGID Language);
|
||||
CResourceDirectoryEntry* FindResourceLanguageDirEntryT(const TCHAR* Type, const TCHAR* Name, LANGID Language);
|
||||
bool DeleteIconImages(const CResourceDirectoryEntry& LangDir);
|
||||
bool DeleteIconImagesW(const WINWCHAR* OwnerType, WINWCHAR* Name, LANGID LangId);
|
||||
bool AddExtraIconFromFile(const WINWCHAR* Type, WINWCHAR* Name, LANGID LangId, BYTE* Data, DWORD Size);
|
||||
CResourceDataEntry* FindIcoCurDataEntry(WORD Type, WORD Id, LANGID PrefLang);
|
||||
|
||||
BYTE* DupData(CResourceDataEntry*pDE); // Free with FreeResource
|
||||
CResourceDirectory* ScanDirectory(PRESOURCE_DIRECTORY rdRoot, PRESOURCE_DIRECTORY rdToScan);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue