REG_MULTI_SZ 是字符串数组类型我用一般的 RegQueryValueEx 只能得到第一个字符串的值比如 如果绑定了两块网卡在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Linkage的"Bind" 中就有两个号,但我只能取得第一个,怎么才能解决呢?

解决方案 »

  1.   

    跳过第一个的结尾符'\0',继续向下读第二个至'\0',REG_MULTI_SZ是以'\0'分隔字符串,以"\0\0"做为结尾的.
      

  2.   

    用RegQueryValueEx读REG_MULTI_SZ 怎么跳过第一个的结尾符'\0'呢?是设置RegQueryValueEx的参数吗?我现在用的参数如下:DWORD lpType=REG_MULTI_SZ;
    LPBYTE lpData=new BYTE[200];
    DWORD lpcbData=200;long ret0=::RegQueryValueEx
    (hKey, 
      "Bind",
      NULL, 
      lpType, 
      lpData, 
      lpcbData 
    );
     
    如果不改变参数,读出来的就只是第一个字符串,如何才能跳过结尾符'\0'呢?
    还请大侠明示
      

  3.   

    把指针向后移一位就是了:
    DWORD lpType=REG_MULTI_SZ;
    LPBYTE lpData=new BYTE[200];
    DWORD lpcbData=200;long ret0=::RegQueryValueEx
    (hKey, 
      "Bind",
      NULL, 
      lpType, 
      lpData, 
      lpcbData 
    );LPTSTR ptr=(LPTSTR)lpData
    TCHAR szCard[2][MAX_PATH];
    for (int i=0;i<2;i++)
    {
      lstrcpy(szCard[i],ptr);
      ptr+=lstrlen(ptr)+1;
    }
    (以上程序未经测试,使用者后果自负,作者保留所有版权)。