ENSURE 出现异常(strDocName.LoadString(AFX_IDS_UNTITLED))

问题描述 投票:0回答:1

我在此函数中遇到异常

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

windows winapi visual-c++ mfc
1个回答
2
投票

我认为这里的问题是您在代码中使用了

ENSURE
宏。如果你检查该宏的定义,它是:

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

LodString returns 
FALSE`如果无法加载指定的字符串(在您的情况下MFC预定义符号它提到了上述ID。

你说:

AFX_IDS_UNTITLED
在字符串表中定义,但在 Spanish 资源下,但这没有帮助。

我假设您使用英语时会出现此问题?如果是这种情况,您只需转到英语字符串表并添加一个新条目即可。在属性中输入

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

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

  • Resource View 选项卡中右键单击您的资源文件。
  • 选择资源包括
  • 确保包含该文件。

© www.soinside.com 2019 - 2024. All rights reserved.