You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
181 lines
4.0 KiB
181 lines
4.0 KiB
/* File: D:\WACKER\tdll\load_res.c (Created: 16-Dec-1993)
|
|
*
|
|
* Copyright 1994 by Hilgraeve Inc. -- Monroe, MI
|
|
* All rights reserved
|
|
*
|
|
* $Revision: 7 $
|
|
* $Date: 4/12/02 4:59p $
|
|
*/
|
|
|
|
#include <windows.h>
|
|
#pragma hdrstop
|
|
|
|
#include "stdtyp.h"
|
|
#include "session.h"
|
|
#include "assert.h"
|
|
|
|
#include "tdll.h"
|
|
#include "htchar.h"
|
|
#include "load_res.h"
|
|
|
|
#if defined(DEADWOOD)
|
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
* FUNCTION:
|
|
* resLoadDataBlock
|
|
*
|
|
* DESCRIPTION:
|
|
* This function is used to get a block of data stored in the resource file
|
|
* as an RCDATA item. Note that in WIN32, it is not necessary to free the
|
|
* resource after it has been locked.
|
|
*
|
|
* PARAMETERS:
|
|
* hSession -- the session handle
|
|
* pszName -- the id for the data block
|
|
* ppData -- where to put the pointer to the data block
|
|
* pSize -- addres of integer for size value
|
|
*
|
|
* RETURNS: 0 if successful, otherwise a defined error value.
|
|
*
|
|
* The size of the resource that has been loaded (in bytes).
|
|
* NOTE: The return value may be (and often is) larger than the actual
|
|
* size of the resource as it is defined in the rc file. For resources
|
|
* of type RCDATA, the resource definition itself should include either a
|
|
* delimiter, or a count of the number of items included in that resource.
|
|
* See also RCDATA_TYPE in stdtype.h
|
|
*/
|
|
INT_PTR resLoadDataBlock(const HINSTANCE hInst,
|
|
const int id,
|
|
const void **ppData,
|
|
DWORD *pSize)
|
|
{
|
|
HGLOBAL hG = NULL;
|
|
HRSRC hR = NULL;
|
|
LPVOID pV = NULL;
|
|
DWORD nSize = 0;
|
|
|
|
if(pSize)
|
|
{
|
|
*pSize = nSize;
|
|
}
|
|
|
|
hR = FindResource(hInst, MAKEINTRESOURCE(id), (LPCTSTR)RT_RCDATA);
|
|
if (hR == NULL)
|
|
{
|
|
assert(FALSE);
|
|
return LDR_BAD_ID;
|
|
}
|
|
|
|
hG = LoadResource(hInst, hR);
|
|
if (hG == NULL)
|
|
{
|
|
assert(FALSE);
|
|
return LDR_NO_RES;
|
|
}
|
|
|
|
nSize = SizeofResource(hInst, hR);
|
|
if (nSize == 0)
|
|
{
|
|
assert(FALSE);
|
|
return LDR_NO_RES;
|
|
}
|
|
|
|
if(pSize)
|
|
{
|
|
*pSize = nSize;
|
|
}
|
|
|
|
pV = LockResource(hG);
|
|
if (pV == 0)
|
|
{
|
|
assert(FALSE);
|
|
return LDR_NO_RES;
|
|
}
|
|
|
|
if (ppData == NULL)
|
|
{
|
|
assert(FALSE);
|
|
return LDR_BAD_PTR;
|
|
}
|
|
|
|
*ppData = pV;
|
|
|
|
return 0;
|
|
}
|
|
|
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
* FUNCTION:
|
|
* resFreeDataBlock
|
|
*
|
|
* DESCRIPTION:
|
|
* This function is not necessary for WIN32.
|
|
*
|
|
* PARAMETERS:
|
|
* hSession -- the session handle
|
|
* pData -- pointer to the data block
|
|
*
|
|
* RETURNS:
|
|
* ZERO if everything is OK, otherwise an error code.
|
|
*/
|
|
INT_PTR resFreeDataBlock(const HSESSION hSession,
|
|
const void *pData)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif // defined(DEADWOOD)
|
|
|
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
* FUNCTION:
|
|
* resLoadFileMask
|
|
*
|
|
* DESCRIPTION:
|
|
* This function is used to get around a problem that exists in loading
|
|
* strings into the common file dialogs. The file name masks are two strings
|
|
* that are NULL separated. This internal NULL is not treated with any
|
|
* respect by the resource functions, so we split them up and do a two part
|
|
* load to rebuild the string.
|
|
*
|
|
* PARAMETERS:
|
|
* hInst -- the instance handle to use
|
|
* uId -- the ID of the first resource to load
|
|
* nCount -- the number of string PAIRS to load, starting a uId
|
|
* pszBuffer -- where to put the strings
|
|
* nSize -- the size of the buffer in characters
|
|
*
|
|
* RETURNS:
|
|
* Zero if everything is OK, otherwise (-1)
|
|
*/
|
|
INT_PTR resLoadFileMask(HINSTANCE hInst,
|
|
UINT uId,
|
|
int nCount,
|
|
LPTSTR pszBuffer,
|
|
int nSize)
|
|
{
|
|
int i;
|
|
LPTSTR pszEnd;
|
|
LPTSTR pszPtr;
|
|
|
|
if (pszBuffer == 0 || nSize == 0)
|
|
{
|
|
assert(0);
|
|
return -1;
|
|
}
|
|
|
|
TCHAR_Fill(pszBuffer, TEXT('\0'), nSize);
|
|
|
|
pszPtr = pszBuffer;
|
|
pszEnd = pszBuffer + nSize;
|
|
|
|
for (nCount *= 2 ; nCount > 0 ; --nCount)
|
|
{
|
|
i = LoadString(hInst, uId++, pszPtr, (int)(pszEnd - pszPtr - 1));
|
|
pszPtr += (unsigned)i + sizeof(TCHAR);
|
|
|
|
if (pszPtr >= pszEnd)
|
|
{
|
|
assert(0);
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|