ID: Q196899
The information in this article applies to:
A call to LoadStringW returns NULL on Windows 95 or Windows 98, even though the string is in the resource.
Strings are stored in resource files in Unicode. LoadStringA converts the strings it reads to Multibyte Character Set (MBCS) before returning them. How this conversion takes place depends on the current code page. LoadStringW, on Windows NT, returns the exact string stored in the resource. On Windows 95 and Windows 98, this function is a stub that returns NULL. This is true of most W functions on Windows 95 and Windows 98, with MessageBoxW being a notable exception.
You can emulate the behavior of LoadStringW through calls to FindResourceEx and LoadResource. Strings are stored in resources in blocks of 16. First, you must locate the block containing the desired string and load it into memory. Then you must locate the string within the block of memory and copy it out. The following code shows how to do this:
// Called as follows: If IDS_TEST is the string you wish to load and
// WCHAR Buffer[128] is your buffer, the call would be
// MyLoadStringW(IDS_TEST,Buffer,128);
// If it succeeds, the function returns the number of characters copied
// into the buffer, not including the NULL terminating character, or
// zero if the string resource does not exist.
int MyLoadStringW(UINT wID, LPWSTR wzBuf, int cchBuf)
{
UINT block, num;
int len = 0;
HRSRC hRC = NULL;
HGLOBAL hgl = NULL;
LPWSTR str = NULL;
UINT i;
wzBuf[0] = L'\0';
block = (wID >> 4) + 1; // Compute block number.
num = wID & 0xf; // Compute offset into block.
hRC = FindResourceEx(NULL,
RT_STRING,
MAKEINTRESOURCE(block),
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL));
hgl = LoadResource(NULL, hRC);
str = (LPWSTR)LockResource(hgl);
if (str)
{
for (i = 0; i < num; i++)
{
str += *str + 1;
}
wcsncpy(wzBuf, str + 1, min(cchBuf - 1, *str));
}
wzBuf[min(cchBuf-1, *str) ] = '\0';
len = *str;
return len;
}
This behavior is by design.
Additional query words:
Keywords : kbSDKPlatform kbString kbGrpUser kbWinOS95 kbWinOS98
Version : WINDOWS:
Platform : WINDOWS
Issue type : kbprb
Last Reviewed: December 11, 1998