我们正在使用MFC数据交换来验证一些数据,但我们遇到了一些问题。我们使用DDV_MinMaxFloat调用来确保应用程序不同部分的编辑框包含指定范围内的浮点数。使用此验证时,如果输入的值超出范围,则会自动向用户显示一个对话框,指示该值必须在指定的范围内。当在debug中运行应用程序时,这已经正常工作了,然而,当我们构建一个版本时,我们得到了问题。验证仍然在发布模式下执行,但是显示给用户的消息框是空白的。
我尝试了通常的强制重建,删除旧的资源文件和删除预编译头文件,但这种情况在发布模式下继续发生。以前有没有人遇到过这个问题?有什么显而易见的东西需要寻找吗?
我还应该补充说,这个应用程序已经有10多年的历史了,所以很明显以前一直工作正常。在过去的几周里,不知何故出了什么差错,导致了这种情况。
发布于 2011-11-23 00:25:10
这些消息将来自MFC的资源字符串。可能会与您自己的资源发生冲突。检查以确保您的资源符合微软的指导方针TN020: ID Naming and Numbering Conventions。
请特别注意这一点:
的内部框架实现保留了两个范围: 0x7000到0x7FFF和0xE000到0xEFFF。
发布于 2011-11-23 00:17:06
在过去的几周里不知何故出了问题,导致了这种情况。
由于您的应用程序在几周前运行良好,因此应该很简单:从您的修订控制系统中签出最后一个工作版本,并将其与当前版本进行比较。或者尝试将其范围缩小到不再起作用的第一个版本。
发布于 2011-11-24 19:10:59
如果显示的消息框上有控件,并且控件上的文本为空,或者根本没有控件,请与Spy++进行核对。如果文本为空,则必须检查资源或消息框的调用/创建方式。否则,可能是资源设置不正确,消息假设它可以从::AfxGetResourceHandle()读取资源字符串。请注意,这是一个很容易犯的错误-它是一个全局句柄,可以在任何地方更改(包括在您无法控制的dll中),因此在代码的远程部分,乍一看似乎不相关的更改可能会触发它。
https://stackoverflow.com/questions/8229898
复制相似问题