微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ENSURE异常strDocName.LoadStringAFX_IDS_UNTITLED

如何解决ENSURE异常strDocName.LoadStringAFX_IDS_UNTITLED

功能出现异常

{
    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。

解决方法

我认为这里的问题是您在代码中使用了ENSURE宏。如果您检查该宏的definitoon,则为:

#define ENSURE(cond) ENSURE_THROW(cond,::AfxThrowInvalidArgException() )

LodString returns 为假,如果它无法加载指定的字符串(在您的情况下,MFC Predefined Symbols则提到了上述ID。

您说:

AFX_IDS_UNTITLED是在字符串表中定义的,但是在西班牙语资源下,但这没有帮助。

我假设您使用英语时会发生此问题?在这种情况下,您只需要转到英语STRINGTABLE并添加一个新条目即可。在属性中输入AFX_IDS_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

因此,您需要确保此标头包含在您的资源中。你如何做到的?

  • 资源视图标签中右键单击您的资源文件。
  • 选择资源包含
  • 确保已包含文件。

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。