Visual studio VS2008上MFC/RC中的错误消息-“;由于代码元素';Cxxxx和x27;是只读的;

Visual studio VS2008上MFC/RC中的错误消息-“;由于代码元素';Cxxxx和x27;是只读的;,visual-studio,mfc,resource-file,Visual Studio,Mfc,Resource File,我在网上搜索过,得到的答案不一致,无法解决我的问题。我创建了一个对话框,然后单击向导为我创建了一个类。不幸的是,它对类和文件的命名很糟糕,所以我重命名了该文件。现在VisualStudio不允许我通过gui对dlg资源执行任何操作—例如连接按钮甚至处理程序等。我收到消息框: “添加/删除操作是不可能的, 因为代码元素“cxxx”是 只读“ 这是一个真正的问题,因为通过代码手动添加处理程序和东西是乏味的,而其中一个开发人员就是不能这样做——他需要GUI来操作事件 我尝试过删除ncb文件并重建项目,

我在网上搜索过,得到的答案不一致,无法解决我的问题。我创建了一个对话框,然后单击向导为我创建了一个类。不幸的是,它对类和文件的命名很糟糕,所以我重命名了该文件。现在VisualStudio不允许我通过gui对dlg资源执行任何操作—例如连接按钮甚至处理程序等。我收到消息框:

“添加/删除操作是不可能的, 因为代码元素“cxxx”是 只读“

这是一个真正的问题,因为通过代码手动添加处理程序和东西是乏味的,而其中一个开发人员就是不能这样做——他需要GUI来操作事件

我尝试过删除ncb文件并重建项目,但一点运气都没有。4年左右后,微软显然还没有解决这个问题(根据我在网上看到的搜索结果)

我无法通过MFC应用程序向导gui添加变量、事件处理程序或任何其他有用的内容。我只能通过编辑cpp和h文件来完成


有人有什么建议吗?

我知道这可能有点晚了,但是您是否也重命名了类本身?如果是,您可能忘记了重命名类

DECLARE_DYNAMIC(RandomClass, CDialog/alternative)  

这些调用的文档不是很完整,但是当我尝试创建一个可以添加事件的类时,我在尝试向该类添加事件时遇到了类似的错误:

我设法(意外地)重现了相同的问题。我定义了
DECLARE\u EVENTSINK\u MAP()
和full

BEGIN_EVENTSINK_MAP(CDlgMessage, CDialog)
ON_EVENT(CDlgMessage, IDC_GM_VIEW1, 1, CDlgMessage::GMEventGmView1, VTS_I2 VTS_BSTR VTS_BSTR)
END_EVENTSINK_MAP()
然后我手动删除了整个BEGIN-END部分,但是我没有删除
DECLARE
。当我稍后尝试通过GUI添加事件处理程序时,我收到了上面提到的响应。简单删除
声明的
部分就解决了问题

我相信这可以复制到所有类似的问题上


Srdjan

我在VS2008项目中添加了现有文件,但也遇到了问题。 我通过删除.suo文件并重新编译解决方案来修复它

也许它能帮助遇到这个问题的人。

我是如何解决这个问题的(删除.ncb/.suo/.user文件和重建没有帮助)

在VS 2008项目中发生此错误时,我注意到以下特点:

  • 它发生在一个dialog+类中,而不是其他类中
  • 在中断对话框的.cpp类文件中,范围选择器只有“(全局范围)”项,没有其他行(预期的类不存在)
  • 我还检查了.h类文件,其中的范围选择器正常
  • 我首先在#2中修复了这个问题(解释如下),然后退出VS,删除*.ncb,*.suo文件,重新启动VS,重建项目,向导再次开始工作

    为了解决#2中的范围选择器问题,我首先将其缩小到未包含在类的.h文件中的头,即,我在类声明中使用了一些类型,但在.h文件中没有声明这些类型的头。因此,如果我将类的.h文件包含在干净的.cpp文件中,它将不会编译。项目的其余部分是编译正常,因为在类的.h之前,所有需要的文件都添加到了所有相应的.cpp文件中。在我将所有必要的头添加到类的.h顶部之后(这样就可以编译干净的.cpp文件了),.cpp文件中的作用域选择器正确填充,从而修复了向导


    旁注:有一个学派认为不将任何其他.h文件包含到任何.h文件中,微软似乎经常坚持这种方式(幸运的是,并非总是如此).I通常遵循不同的包含策略-始终将包含所有已使用声明的头文件包含到.h文件中,因此当我需要使用模块时,我必须只包含其.h文件。在这种情况很少发生的情况下,VS向导阻塞(或向导所依赖的IntelliSense阻塞)。它使我加入此包含策略的能力更强。此策略的唯一例外是没有将任何stdafx.h、windows和MFC文件放入模块的.h文件中-由于预编译头的原因,这样做的方式有所不同。

    仅供参考,我在Visual Studio 2010 SP1中遇到了相同的问题

    删除SDF文件(Visual Studio 2010相当于先前版本的NCB)修复了该问题


    (我先尝试了很多其他的事情,包括清理项目和重建,删除.suo文件等等,但都没有用。但是,除了最终删除SDF文件外,我不知道是否还需要这些操作。)

    在Visual studio 2008中,删除解决方案.ncb文件和重建也对我有效。
    我应该提到的是,在将代码迁移到新电脑后,我开始面临这个问题。

    我在VS2005上也遇到了同样的问题。我尝试删除*.ncb和*.suo,但没有成功


    最后,我只需要关闭正在被投诉的文件(因为它正在被打开,当我们在GUI资源上执行一些操作(例如向菜单项添加事件处理程序)时,VS无法自动向文件添加新代码).

    不确定我们如何在不重新编程的情况下解决此问题。我确信VS开发人员对您在网上看到的许多类似错误也有相同的看法。包含重新编程项目的“我看到”帖子已在VS 2010中标记为已修复。也许是升级的时候了。尽管我从未在任何一个版本中遇到过此错误,但我仍然会在使用向导后,我经常改变对类名的看法。@Cody-升级会很好-不幸的是,我们使用的一些库在2010年仍然不受支持…VS 2010中不支持哪种库?我没有看到过这样的事情;他们真的在利用VS 2008编译器中的bug吗?即使如此,您也可以设置VS 2010使用VS 2008编译器,只要您同时拥有两个版本instal
    BEGIN_EVENTSINK_MAP(CDlgMessage, CDialog)
    ON_EVENT(CDlgMessage, IDC_GM_VIEW1, 1, CDlgMessage::GMEventGmView1, VTS_I2 VTS_BSTR VTS_BSTR)
    END_EVENTSINK_MAP()