Сбой поиска CMap - PullRequest
       1

Сбой поиска CMap

0 голосов
/ 08 марта 2012

У меня есть приложение MFC. Он имеет CMap, который содержит определенные объекты данных, карта объявляется как CMap<DWORDLONG, DWORDLONG,_ItemsObj*,_ItemsObj*>, где _ItemsObj - это структура, которая содержит различные данные.

Проблема, с которой я сталкиваюсь, заключается в том, что при попытке найти запись метод Lookup неожиданно завершается неудачно в сборках x64 (и ТОЛЬКО в сборках x64).

Вот код, который я использую

BOOL IsItemExist(DWORDLONG dwid)
{_ItemsObj* pObj=NULL;
if(!m_Itemsmap.Lookup(dwid,pObj))
{return FALSE;}
return TRUE;
}

Теперь это отлично работает на 32-битной сборке моего приложения. Однако в сборке x64 Lookup всегда дает сбой, даже если элементы присутствуют на карте, а ключ, который я ищу, присутствует на карте.

Я думаю, что это в некоторой степени связано с проблемой конфигурации сборки, я проверил свойства связывания и конфигурацию сборки для параметров x86 и x64 для проекта приложения, и они используют точно такую ​​же конфигурацию, за исключением параметра целевой машины (который должен быть другим).

Может кто-нибудь помочь мне исправить это, я искал решение по всему Интернету, но ничего не смог найти.

О, и я использую VS 2010 SP1

Привет

1 Ответ

1 голос
/ 15 марта 2012

Существует пять глобальных вспомогательных функций, которые используют CMap, CList и CArray. Это CompareElements, CopyElements, DumpElements, HashKey и SerializeElements. Вероятно, ваша проблема связана с SerializeElements, который CMap использует для хранения элемента коллекции. Другая вещь, которую стоит попробовать - объявить ваш CMap как CMap

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