2011-11-22 42 views
0

我们使用MFC数据交换来验证一些数据,并且我们遇到了一些问题。我们使用DDV_MinMaxFloat调用来确保应用程序各个部分中的编辑框包含指定范围内的浮点数。如果使用此验证,如果输入值超出范围,对话框将自动显示给用户,表明该值必须位于指定的范围内。在调试中运行应用程序时,这一直正常工作,但在构建发布版本时遇到问题。验证仍然在发布模式下执行,但显示给用户的消息框为空白。MFC数据交换验证

我试过平常强制重建,删除旧资源文件和删除预编译头文件,但这种情况在发布模式下仍然会发生。有没有人遇到过这个?是否有任何明显的事情要寻找?

我还应该补充说,这个应用程序已经超过10年了,所以显然以前工作正常。不知何故,在过去的几个星期里出现了一些问题。

+0

这听起来不像验证问题,听起来像是您的消息框有问题。你能从程序的其他(非验证)部分显示消息框吗?你能给我们一些消息框的代码吗?另外,请参阅签名常见问题:http://stackoverflow.com/faq#signatures – HostileFork

+0

我同意验证是正确的。然而,消息框是由框架自动生成的,所以我无法控制消息框(感谢签名提示) – mattythomas2000

+0

啊,我明白了。幸运的是,我没有用MFC编写一段时间,但我的教育猜测是对话取决于可本地化的资源字符串(“值必须在%f和%f之间”),并且您的发布版本没有得到除了根据@DocBrown的建议恢复之外,您还可以收集更多的数据点。 (例如:这是只发生在MinMaxFloat,还是所有的DDV处理程序?) – HostileFork

回答

0

不知何故,在过去几周出现了一些问题,导致这种情况。

由于您的应用程序在几个星期前工作正常,应该很容易:检查您的版本控制系统的最新版本并将其与当前版本进行比较。或者尝试缩小到第一个不再适用的版本。

+0

这正是我所要做的。 –

1

这些消息将来自MFC的资源字符串。可能与您自己的资源有冲突。请检查以确保您的资源符合Microsoft的指导TN020: ID Naming and Numbering Conventions。通过0xEFFF通过0x7FFF的和0xE000 0x7000 :

要特别注意这一点:

MFC的内部框架实现储备两个范围。

+0

我认为这是一个很好的建议,可能会引导我们回答,但是最初看起来似乎没有任何资源冲突 – mattythomas2000

0

使用Spy ++检查显示的消息框是否有控件,并且它们上的文本是空白还是根本没有控件。如果文本为空,则必须检查资源或消息框的调用/创建方式。否则,它可能是资源设置不正确,并且该消息假定它可以从:: AfxGetResourceHandle()读取其资源字符串。请注意,这是一个非常容易的错误 - 它是一个全局句柄,可以在任何地方进行更改(包括在dll中您无法控制的),因此一见钟情似乎无关的代码远程部分的更改可能会触发它。