当我的程序试图为用户生成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加载字符串?
答案 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
您需要确保在项目中执行相同的操作。或者,您可以使用“资源包含”向导,通过右键单击资源视图,该向导允许通过对话框编辑这两个部分: