如何根据资源标识符加载字符串?

时间:2010-10-11 00:47:08

标签: c++ winapi resources

我正在从注册表中读取一个类似于:

的条目

@%SystemRoot%\\System32\\wscsvc.dll,-200

我需要从文件中加载字符串。

我发现an article描述了最终数字的行为(负= =特定资源ID,正= =文件中的第n个资源),但我对如何加载数据感到困惑资源。 ExtractIcon函数似乎执行了我需要的资源加载,但它返回HICON,而不是字符串。

我如何从文件中加载字符串?

2 个答案:

答案 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函数,该函数正是为此而设计的。

  

在给定指定文本资源的情况下,提取该文本资源   间接字符串的形式(以“ @”符号开头的字符串)。