0

我正在尝试从我正在处理的 DLL 文件中的 Strin 表中加载一个字符串。这是应该将字符串加载到 a 中的函数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

我哪里错了?

4

2 回答 2

2

AfxGetInstanceHandle()为您提供HINSTANCE正在运行的可执行文件。这意味着您的LoadStringW调用将在 exe 的资源表中查找您的字符串,这将失败,因为字符串在您的 DLL 中。

相反,您需要获取DLL 本身HINSTANCE的 - 这是作为DLL中的第一个参数提供的。DllMain()

有关示例,请参见此答案: https ://stackoverflow.com/a/2396380/1073843

编辑:如果您使用的是 MFC DLL,那么您可能只需要AFX_MANAGE_STATE(AfxGetStaticModuleState());在您的 DLL 的任何入口点的顶部添加一个调用(在AfxGetInstanceHandle()调用之前。)

于 2014-01-27T14:09:55.437 回答
0

看看这个问题,如果它是一个 MFC DLL,它将告诉你如何获取HINSTANCE你的 DLL。

于 2014-01-27T14:15:50.550 回答