我有一个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
此致
答案 0 :(得分:1)
CMap,CList和CArray使用五种全局帮助函数。它们是CompareElements,CopyElements,DumpElements,HashKey和SerializeElements。 CMap用来存储集合元素的SerializeElements可能会出现问题。 另一件要尝试的是将你的CMap声明为 CMap&lt; DWORDLONG,DWORDLONG,_ItemsObj,_ItemsObj *&gt;