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

Bil*_*eal 3 c++ resources winapi

我正在从注册表中读取一个类似于以下内容的条目:

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

我需要实际加载文件中的字符串.

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

我怎么能从文件中加载字符串?

Ada*_*eld 5

加载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
Run Code Online (Sandbox Code Playgroud)

请注意LoadLibrary(几乎任何其他函数都采用文件名)不理解环境变量%SystemRoot%.你必须使用一个函数ExpandEnvironmentStrings来扩展DLL文件名中的环境变量,然后再传递给它LoadLibrary.