Проверка обмена данными MFC - PullRequest
0 голосов
/ 22 ноября 2011

Мы используем обмен данными MFC для проверки некоторых данных, и у нас возникли некоторые проблемы. Мы используем вызов DDV_MinMaxFloat, чтобы гарантировать, что поля редактирования в различных частях приложения содержат числа с плавающей запятой в пределах указанного диапазона. При использовании этой проверки, если значение вводится вне диапазона, пользователю автоматически отображается диалоговое окно, указывающее, что значение должно находиться в указанном диапазоне. Это работало правильно, пока приложение запускалось в режиме отладки, однако при создании релиза у нас возникают проблемы. Проверка все еще выполняется в режиме деблокирования, однако окно сообщения, отображаемое для пользователя, остается пустым.

Я пробовал обычное принудительное восстановление, удаление старых файлов ресурсов и удаление предварительно скомпилированных заголовочных файлов, но это продолжается в режиме выпуска. Кто-нибудь сталкивался с этим раньше? Есть ли какие-то очевидные вещи, которые нужно искать?

Я должен также добавить, что этому приложению уже более 10 лет, поэтому, очевидно, раньше оно работало правильно. Почему-то что-то пошло не так в последние несколько недель, чтобы вызвать это.

Ответы [ 3 ]

1 голос
/ 22 ноября 2011

Эти сообщения будут поступать из строк ресурсов MFC.Может быть конфликт с вашими ресурсами.Убедитесь, что ваши ресурсы соответствуют рекомендациям Microsoft TN020: соглашения об именовании и нумерации ID .

Обратите особое внимание на этот бит:

Реализация внутренней структуры MFCзарезервируйте два диапазона: от 0x7000 до 0x7FFF и от 0xE000 до 0xEFFF.

0 голосов
/ 24 ноября 2011

Проверьте с помощью Spy ++, есть ли элементы управления в отображаемом окне сообщения, и если текст на них пуст, или на них вообще нет элементов управления. Если текст пуст, вам придется проверить ресурсы или способ, которым окно сообщения называется / создано. В противном случае это может быть что-то вроде неправильно установленного ресурса и сообщения, предполагающего, что он может прочитать свои строки ресурса из :: AfxGetResourceHandle (). Обратите внимание, что это очень простая ошибка - это глобальный дескриптор, который может быть изменен везде (в том числе в dll, над которым у вас нет контроля), поэтому изменения в удаленных частях кода, которые на первый взгляд кажутся не связанными, могут вызвать его.

0 голосов
/ 22 ноября 2011

Почему-то что-то пошло не так в последние несколько недель, чтобы вызвать это.

Поскольку ваше приложение работало отлично несколько недель назад, это должно быть легко: проверьте последнюю рабочую версию в вашей системе контроля версий и сравните ее с текущей версией. Или попытайтесь сузить его до первой ревизии, которая больше не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...