我正在尝试从我正在处理的DLL文件中的Strin Table加载一个字符串。这是应该将字符串加载到std::wstring
的函数(因为我的项目使用Unicode字符集)。
void ErrorHandler::load_error_string()
{
m_hInst = AfxGetInstanceHandle();
wchar_t buffer[1024] = { '\0' };
std::size_t string_length = LoadStringW(this->m_hInst, this->m_error_id, buffer, 1024);
this->m_raw_content = std::wstring(buffer, string_length);
CStringW output;
output.Format(L"%d", m_raw_content.length());
AfxMessageBox(output);
}
我已经创建了诊断该方法的最后三行。 AfxMessageBox()
的输出为0
。
我哪里错了?
答案 0 :(得分:2)
AfxGetInstanceHandle()
为您提供正在运行的可执行文件的HINSTANCE
。这意味着你的LoadStringW
调用将在exe的资源表中查找你的字符串,这将失败,因为字符串在你的DLL中。
相反,您需要抓取 DLL本身的HINSTANCE
- 这是作为DLL中DllMain()
的第一个参数提供的。
请参阅此答案以获取示例: https://stackoverflow.com/a/2396380/1073843
修改强>:
如果您正在使用MFC DLL,那么您可能只需要在DLL的任何入口点的顶部添加对AFX_MANAGE_STATE(AfxGetStaticModuleState());
的调用(在AfxGetInstanceHandle()
被调用之前。)
答案 1 :(得分:0)
查看this question,它将向您展示如果它是MFC DLL,如何获取DLL的HINSTANCE
。