Windows 确保时出现异常(strDocName.LoadString(AFX_id_UNTITLED))

Windows 确保时出现异常(strDocName.LoadString(AFX_id_UNTITLED)),windows,winapi,visual-c++,mfc,Windows,Winapi,Visual C++,Mfc,我在这个函数中遇到了一个异常 { CString strDocName; if (!GetDocString(strDocName, CDocTemplate::docName) || strDocName.IsEmpty()) { // use generic 'untitled' ENSURE(strDocName.LoadString(AFX_IDS_UNTITLED)); } pDocument-&g

我在这个函数中遇到了一个异常

{
    CString strDocName;
    if (!GetDocString(strDocName, CDocTemplate::docName) ||
        strDocName.IsEmpty())
    {
        // use generic 'untitled'
        ENSURE(strDocName.LoadString(AFX_IDS_UNTITLED));
    }
    pDocument->SetTitle(strDocName);
}
AFX_IDS_UNTITLED
在字符串表中定义,但在西班牙语资源下,但这没有帮助。 我从未使用过本地化资源,也不知道发生了什么。我已经被困在这三天了。如果有人能帮忙就好了


注意:我已经将2005 VS代码移植到2017 VS。

我认为这里的问题是您在代码中使用了
确保
宏。如果您检查宏的定义,它是:

#定义确保(cond)确保抛出(cond,::AfxThrowInvalidArgException())

LodString返回
FALSE`如果它无法加载指定的字符串(在您的例子中,它提到了前面提到的ID)

你说:

AFX_IDS_UNTITLED
在字符串表中定义,但在西班牙语参考资料下定义,但这没有帮助

我假设这个问题是在您使用英语时发生的?如果是这种情况,您只需转到English STRINGTABLE并添加一个新条目。在属性中键入
AFX\u IDS\u UNTITLED
,并提供一个您想要使用的短语


您会发现此ID在文件
afxres.h
中定义:

// General strings
#define AFX_IDS_OPENFILE                0xF000
#define AFX_IDS_SAVEFILE                0xF001
#define AFX_IDS_ALLFILTER               0xF002
#define AFX_IDS_UNTITLED                0xF003
#define AFX_IDS_SAVEFILECOPY            0xF004
#define AFX_IDS_PREVIEW_CLOSE           0xF005
#define AFX_IDS_UNNAMED_FILE            0xF006
#define AFX_IDS_HIDE                    0xF011
因此,您需要确保此标题包含在您的资源中。您如何做到这一点

  • 在资源视图选项卡中右键单击资源文件
  • 选择资源包含
  • 确保包含该文件

例外情况是什么?请提供“我不知道发生了什么”-调试器会告诉您。MFC附带源代码,因此您可以单步进入库代码。@IInspectable LoadString被定义为LoadStringA。我实际上无法进入函数的定义。@AlanBirtles它只是说sequenceEditor触发了一个断点。不知道是seg故障还是smth
LoadString
显然是一个类成员。该类最终会将调用转发到Windows API。在此之前,您将检查参数。这对诊断问题完全有帮助。嗨,我之前就已经解决了。我今天查看了答案。问题是我必须在字符串表中包含35; define AFX_IDS_UNTITLED 0xF003我使用的语言的e。一旦这样做了,它的进展就没有问题了