代码之家  ›  专栏  ›  技术社区  ›  Billy ONeal IS4

如何基于资源标识符加载字符串?

  •  3
  • Billy ONeal IS4  · 技术社区  · 14 年前

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

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

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

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

    如何从文件加载字符串?

    2 回复  |  直到 5 年前
        1
  •  5
  •   Adam Rosenfield    14 年前

    用加载dll LoadLibrary ,加载字符串 LoadString ,然后卸载dll(假设您不需要从中获取任何其他内容)。 FreeLibrary :

    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
    

    注意 加载 (以及几乎所有其他接受文件名的函数)都不理解环境变量,比如 %SystemRoot% . 你必须使用一个函数,比如 ExpandEnvironmentStrings 在将dll文件名中的环境变量传递给 加载 .

        2
  •  0
  •   Simon Mourier    5 年前

    这种字符串称为“间接字符串”。最简单的方法是调用 SHLoadIndirectString 就是这个功能。

    当在 间接字符串的形式(以“@”符号开头的字符串)。