gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:48:09 24 4
gpt4 key购买 nike

我正在读取注册表中的条目,结果如下:

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

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

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

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

最佳答案

使用 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 之前扩展环境变量。

关于c++ - 如何根据资源标识符加载字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3902880/

24 4 0
文章推荐: c++ - 如何从子目录自动加载 DLL?
文章推荐: c# - 在 C# 中,null 是否也继承自 Object?
文章推荐: python - 补丁中的 matplotlib 颜色渐变?
文章推荐: c# - 从 IEnumerable 转换为 IEnumerable