尝试从afxres.rc加载字符串时MFC LoadString失败

时间:2014-03-24 15:35:58

标签: visual-c++ mfc

当我的程序试图为用户生成AFX_IDP_PARSE_REAL错误时,它无法加载存储在afxres.rc文件中的字符串。我已经找到了this question,但它已经解决了,因为从program.rc文件中意外删除了对afxres.rc的引用。对我来说情况并非如此。我的program.rc文件包含答案中列出的确切代码,包括afxres.rc文件。

在调试模式下,它会在下面的ASSERT中断。

int AFXAPI AfxMessageBox(UINT nIDPrompt, UINT nType, UINT nIDHelp)
{
 CString string;
 if (!string.LoadString(nIDPrompt))
 {
  TRACE(traceAppMsg, 0, "Error: failed to load message box prompt string 0x%04x.\n", nIDPrompt);
  ASSERT(FALSE);
 }
 if (nIDHelp == (UINT)-1)
 nIDHelp = nIDPrompt;
 return AfxMessageBox(string, nType, nIDHelp);
}

当我实际通过.exe运行应用程序时,它只会生成一个空警告框,因为未加载AFX_IDP_PARSE_REAL字符串;这适用于afxres.rc中的任何字符串。

什么可能导致应用程序无法从afxres.rc加载字符串?

1 个答案:

答案 0 :(得分:0)

让您知道正常包含afxres.rc文件是不够的,将头文件包含到cpp / h文件中的方式。你实际上需要包括它两次。如果您创建一个全新的MFC项目并检查rc文件的代码(使用“查看代码”选项),您会注意到有一个正常的包含:

/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"

并且rc文件中有一个TEXTINCLUDE部分:

2 TEXTINCLUDE 
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END

您需要确保在项目中执行相同的操作。或者,您可以使用“资源包含”向导,通过右键单击资源视图,该向导允许通过对话框编辑这两个部分:

VC Resource Includes wizard

相关问题