C++ 加载字符串(AFX_IDP_PARSE_INT)在mfc exe(而不是dll)中失败

C++ 加载字符串(AFX_IDP_PARSE_INT)在mfc exe(而不是dll)中失败,c++,mfc,C++,Mfc,AFX_IDP_PARSE_INT是标准MFC错误消息的id(它在afxres.h中定义),但在我的项目中它无法加载,这意味着LoadString返回FALSE,GetLastError返回错误资源名称_未找到,并且CString保持为空 即使在initInstance开始时尝试加载它,也会发生这种情况: BOOL CMyLegacyProject::InitInstance() { CString string; if (!string.LoadString(AFX_IDP_P

AFX_IDP_PARSE_INT
是标准MFC错误消息的id(它在afxres.h中定义),但在我的项目中它无法加载,这意味着
LoadString
返回
FALSE
GetLastError
返回
错误资源名称_未找到
,并且CString保持为空

即使在initInstance开始时尝试加载它,也会发生这种情况:

BOOL CMyLegacyProject::InitInstance()
{
    CString string;
    if (!string.LoadString(AFX_IDP_PARSE_INT))
            AfxMessageBox(_T("Failed."));
}

同样的代码也适用于一个新项目,但是-同样的MFC链接(我静态链接到它),同样的WINVER,我试着使它与我的旧项目一样,但我无法在新启动的项目上重现错误。

看起来您的资源没有正确构建。确保您的.rc文件也包含所有AFX资源。首先,我尝试从头开始构建一个全新的项目,测试加载其中的字符串,然后查看default.rc文件的外观

它应该包含一个名为“afxres.rc”的文件,即您的rc中应该包含如下内容:

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE 9, 1
#pragma code_page(1252)
#endif //_WIN32
#include "res\MyRes.rc2"  // non-Microsoft Visual C++ edited resources
#include "afxres.rc"         // Standard components
#include "afxprint.rc"       // printing/print preview resources
#endif

可能意味着代码中的其他地方有错误。我会尝试系统地从旧项目中删除代码,直到错误消失。当它消失时,您删除的最后一段代码可能就是带有错误的代码。我会从出现此错误时您上次处理的代码开始。您可以检查
GetLastError
以查看它是否返回可能相关的内容吗?它返回错误\u RESOURCE\u NAME\u NOT\u FOUND。@john我已经将此代码放在InitInstance的开头,因此它会在任何其他代码之前执行,例外是任何静态或全局变量的构造函数。谢谢,原来我没有包括“afxres.rc”。当我将它添加到我的rc文件时,字符串正在加载。我记得我曾经调整过rc include,添加了一些额外的.rc2文件,我当时一定是在没有意识到的情况下删除了它。奇怪的是,我有一个TEXTINCLUDE部分,其中有一行“#include”“afxres.rc”,但可能没有效果。