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

3
我正在读取注册表中的一个条目,它的输出类似于:

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

我需要实际从文件中加载字符串。
我找到了一篇文章,其中描述了末尾数字的行为方式(负数==特定资源ID,正数==文件中的第n个资源),但我不确定如何加载资源。 ExtractIcon函数似乎可以完成我需要的资源加载,但它返回一个HICON而不是一个字符串。
我应该如何从文件中加载字符串?
2个回答

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%。在将DLL文件名传递给LoadLibrary之前,您将需要使用诸如ExpandEnvironmentStrings之类的函数来展开DLL文件名中的环境变量。

哇..我感觉自己好蠢。谢谢 :) - Billy ONeal

0
这种字符串被称为“间接字符串”。获取它的最简单方法是调用SHLoadIndirectString函数,该函数专门用于此目的。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接