LoadString()方法在C ++中不起作用

时间:2014-01-27 13:44:26

标签: c++ dll mfc resources string-table

我正在尝试从我正在处理的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

我哪里错了?

2 个答案:

答案 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