86 lines
1.5 KiB
C
86 lines
1.5 KiB
C
|
/*
|
||
|
* Misc.c
|
||
|
*
|
||
|
* Author: BreenH
|
||
|
*
|
||
|
* Miscellaneous utilities.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Includes
|
||
|
*/
|
||
|
|
||
|
#include "precomp.h"
|
||
|
|
||
|
/*
|
||
|
* Function Implementations
|
||
|
*/
|
||
|
|
||
|
BOOL WINAPI
|
||
|
LoadStringResourceW(
|
||
|
HMODULE hModule,
|
||
|
UINT uiResourceId,
|
||
|
PWSTR *ppString,
|
||
|
PDWORD pcchString
|
||
|
)
|
||
|
{
|
||
|
BOOL fRet;
|
||
|
INT iRet;
|
||
|
PWSTR pROString;
|
||
|
PWSTR pString;
|
||
|
|
||
|
ASSERT(ppString != NULL);
|
||
|
|
||
|
//
|
||
|
// Get a pointer to the string in memory. This string is the actual read-
|
||
|
// only memory into which the module is loaded. This string is not NULL
|
||
|
// terminated, so allocate a buffer and copy the exact number of bytes,
|
||
|
// then set the NULL terminator.
|
||
|
//
|
||
|
|
||
|
fRet = FALSE;
|
||
|
pROString = NULL;
|
||
|
|
||
|
iRet = LoadStringW(
|
||
|
hModule,
|
||
|
uiResourceId,
|
||
|
(PWSTR)(&pROString),
|
||
|
0
|
||
|
);
|
||
|
|
||
|
if (iRet > 0)
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// For better performance, don't zero out the entire allocation just
|
||
|
// to copy the string. Zero out the last WCHAR to terminate the
|
||
|
// string.
|
||
|
//
|
||
|
|
||
|
pString = (PWSTR)LocalAlloc(LMEM_FIXED, (iRet + 1) * sizeof(WCHAR));
|
||
|
|
||
|
if (pString != NULL)
|
||
|
{
|
||
|
RtlCopyMemory(pString, pROString, iRet * sizeof(WCHAR));
|
||
|
|
||
|
pString[iRet] = (WCHAR)0;
|
||
|
|
||
|
*ppString = pString;
|
||
|
|
||
|
if (pcchString != NULL)
|
||
|
{
|
||
|
*pcchString = (DWORD)iRet;
|
||
|
}
|
||
|
|
||
|
fRet = TRUE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
SetLastError(ERROR_OUTOFMEMORY);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return(fRet);
|
||
|
}
|
||
|
|