首页 > 解决方案 > ENSURE 的异常(strDocName.LoadString(AFX_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在字符串表中定义,但在西班牙资源下,但这无济于事。我从未使用过本地化资源,也不知道发生了什么。我已经被困在这里3天了。如果有人能帮忙就好了。

注意:我一直在将 2005 VS 代码移植到 2017 VS。

标签: windowswinapivisual-c++mfc

解决方案


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

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

LodString returns FALSE` 如果它无法加载指定的字符串(在你的情况下MFC 预定义符号它提到了上述 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

因此,您需要确保此标头包含在您的资源中。你怎么做到这一点?

  • 在“资源视图”选项卡中右键单击您的资源文件。
  • 选择资源包括
  • 确保包含该文件。

在此处输入图像描述


推荐阅读