我正在从注册表中读取一个类似于:
的条目 @%SystemRoot%\\System32\\wscsvc.dll,-200
我需要从文件中加载字符串。
我发现an article描述了最终数字的行为(负= =特定资源ID,正= =文件中的第n个资源),但我对如何加载数据感到困惑资源。 ExtractIcon
函数似乎执行了我需要的资源加载,但它返回HICON
,而不是字符串。
我如何从文件中加载字符串?
答案 0 :(得分:5)
使用LoadLibrary
加载DLL,使用LoadString
加载字符串,然后使用FreeLibrary
卸载DLL(假设您不需要任何其他内容):
HMODULE hDll = LoadLibrary("C:\\WINDOWS\\System32\\wscsvc.dll");
if(hDll != NULL)
{
wchar_t *str;
if(LoadStringW(hDll, +200, (LPWSTR)&str, 0) > 0)
; // success! str now contains a (read-only) pointer to the desired string
else
; // handle error
FreeLibrary(hDll);
}
else
; // handle error
请注意LoadLibrary
(以及几乎所有其他函数都采用文件名)都不了解%SystemRoot%
等环境变量。您必须使用ExpandEnvironmentStrings
之类的函数来扩展DLL文件名中的环境变量,然后再将其传递给LoadLibrary
。
答案 1 :(得分:0)
这种字符串称为“间接字符串”。最简单的方法是调用SHLoadIndirectString函数,该函数正是为此而设计的。
在给定指定文本资源的情况下,提取该文本资源 间接字符串的形式(以“ @”符号开头的字符串)。