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

标签 c++ dll mfc resources string-table

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

我哪里错了?

最佳答案

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

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

请参见以下答案以获取示例:
https://stackoverflow.com/a/2396380/1073843

编辑:
如果使用的是MFC DLL,则可能只需要在DLL的所有入口点的顶部添加对AFX_MANAGE_STATE(AfxGetStaticModuleState());的调用(在调用AfxGetInstanceHandle()之前)。

本文翻译自 https://stackoverflow.com/questions/21382464/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。


相关文章:

c++ - C ++数据结构通过向量实现二叉树

c++ - C ++模板类的静态const变量成员作为映射键提供了未定义的引用

c++ - 内存位置未处理的异常bad_alloc

c++ - CButton CDC :: SetBkColor什么都不做?

c++ - 提升lib链接器错误Visual C ++

ubuntu - 在64位系统上运行以32位标记编译的分片对象时出错:PAM无法dlopen my_pam.so错误的ELF类:ELFCLASS32

python - Python Ctypes:正在加载C ++ DLL-“未找到模块”或“未找到功能'fn_123'”

c++ - 显式链接DLL和类方法

windows - MFC多个Windows相同的文件

c++ - 如何使用修改后的DLGTEMPLATEEX调用CDialog :: DoModal()