带有数字标识符的LoadString

时间:2013-06-05 19:02:49

标签: winapi

我对此代码有疑问:

    int
WINAPI
Getdesc(IN WORD wcode,
         OUT LPWSTR lpBuf)
{
    WCHAR szDescription[256];
    int res = LoadStringW(NULL,wcode,szDescription,256);
    if(res == 0)
    { 

        wcscpy(lpBuf, L"Undefined");
        return 0;
    }
    else
    {
        wcscpy(lpBuf,szDescription);
        return 0;
     }
}

该函数放在DLL中,当我访问它时,它总是返回“Undefined”, 我认为我的LoadString调用存在问题,但我无法弄明白。 我是Windows编程的新手,任何帮助都将不胜感激

1 个答案:

答案 0 :(得分:4)

问题是您将NULL作为HINSTANCE参数传递。这意味着您在可执行主机而不是DLL中查找资源。您必须传递DLL的模块句柄。作为传递给DllMain函数的第一个参数,您将获得该实例句柄。

如果您正在使用MSVC进行编译,那么您可以使用__ImageBase来获取模块句柄。就个人而言,我建议记下传递给DllMain的值是一种更清晰的方法。它避免了对一个特定编译器的依赖。

另请注意,如果GetLastError无法获取有关错误原因的详细信息,则可以调用LoadString。这很可能会帮助你识别错误。