定义了一个这样的
CMap<CString*, CString*, HANDLE*, HANDLE*> p_threadHandle;赋值:
HANDLE hTemp[BLOCK];
CString strThreadOnlyFlag="1111"; for(int i=0;i<BLOCK;i++)
{
HANDLE hdtemp=::CreateThread(NULL,0,downthread,(LPVOID)pdownload,0,&dwthread);
hTemp[i]=hdtemp;
}

p_threadHandle.SetAt(&strThreadOnlyFlag,hTemp);
取值  HANDLE* m_hdResult;
p_threadHandle.Lookup(&strThreadOnlyFlag,m_hdResult);这样取怎么也取不出来!

解决方案 »

  1.   

    乱来。
    如果用CString作为KEY,你应该用LPCTSTR做ARG_KEY而非CString&。
      

  2.   

    CMap<CString, LPCTSTR, HANDLE, HANDLE&>
      

  3.   

    不是乱来。注意看,他的CMap是用CString*作为key的,而不是CString。说实话,这几句代码下午我在他的另一贴里就已经看到了,当时就没发现有什么问题(当然他写的代码是不是能达到他想要达到的目的且不谈,我只谈为什么Lookup取不出来)。刚才测试了一下,果然没有任何问题,单凭楼主列出来的那些代码,按顺序就这么排下来的话,确实应该是能取出来的。按楼主的说法,他在取之前还测试了一下,确认Map里确实是有一个元素的,那么,他又是怎样做到让这个Map取不出来的呢?说实话,这让我很费解。作为key的是一个变量的指针,甚至据楼主说,这个变量还是个全局的,这个指针怎么可能变化?
      

  4.   

    微软有提供CStringMapToPtr这个类可以用CString作为key