2011-11-22 41 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中您無法控制的),因此一見鍾情似乎無關的代碼遠程部分的更改可能會觸發它。