map

时间:2008-07-24 16:54:20   来源:论坛整理  作者:  编辑:chinaitzhe
新建一个map <LPTSTR,LPTSTR>变量.假设为mss;
利用OpenSCManager()获得一个SC_HANDLE的句柄.
然后利用EnumServicesStatusEx()获得windows的服务列表.并将结果存在mss中.其中服务的显示名为Key.服务名是value.
并将服务显示名存入到COMBOBOX组件形成一个下拉列表.
但是我用当我用下拉列表中的当前字符串去查mss中的value时.总是查不到.我通过调试确定传入的值是正确的.
哪个知道原因告诉小弟一下.
网友回复:LPTSTR改成basic_string <TCHAR>
网友回复:遍历下map,看是否真实存入!
网友回复:
引用 1 楼 akirya 的回复:
LPTSTR改成basic_string <TCHAR>

请问一下为什么不成用LPTSTR? 为什么要用TCHAR?
网友回复:有没有可能是类型不匹配?
网友回复:
引用 2 楼 hblinlin 的回复:
遍历下map,看是否真实存入!

我用的是VS2005.里面存储的值没有问题
网友回复:比较的时候只是比较指针的值大小而不是比较内容,你说会正确么?
就跟char* p = "123";
char* p2=new char[4];
strcpy(p2,p);
if( p == p2 ) ?这里相等么?
网友回复:
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





#include<iostream>

#include<map>

#include "windows.h"

#include "Winsvc.h"

using namespace std;



int main()

{

    typedef map<basic_string<TCHAR>,basic_string<TCHAR> > SSMap;

    SSMap srvTable;

    SC_HANDLE sc_handle;

    sc_handle = ::OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);



    if(sc_handle != NULL)

    {

      

        LPENUM_SERVICE_STATUS_PROCESS lpServices;

        DWORD pcbBytesNeeded;

        DWORD lpResumeHandle = 0;

        DWORD lpServicesReturned;

        lpServices = (LPENUM_SERVICE_STATUS_PROCESS) LocalAlloc(LPTR, 30720); 



        if(EnumServicesStatusEx(sc_handle,SC_ENUM_PROCESS_INFO,SERVICE_WIN32,SERVICE_STATE_ALL,(LPBYTE)lpServices,30720,&pcbBytesNeeded,&lpServicesReturned,&lpResumeHandle,NULL))

        {

            for(DWORD i=0;i< lpServicesReturned -1;  i)

            {

                cout<<lpServices[i].lpDisplayName<<endl;

                srvTable[lpServices[i].lpDisplayName]=lpServices[i].lpServiceName;

            }

            ::CloseServiceHandle(sc_handle);

        }

        else

        {

           //错误处理

        }

    }    

}



关键字:map,LPTSTR,LPTSTR,查找,问题,

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面