那为帮个忙。急

解决方案 »

  1.   

    unsigned short a[20];
    unsigned short* b;b = new unsigned short[20];
    memcpy(b,a,20);delete []b;
      

  2.   

    原型:extern char *strcpy(char *dest,char *src);
            
      用法:#include <string.h>
      
      功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
      
      说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
            返回指向dest的指针。
      

  3.   


          wchar_t         wcUserName[MAX_STRLEN];
          wchar_t         wcPassWord[MAX_STRLEN];
          BYTE            user[20];
      char            password[MAX_PATH];
          CString         pw;
      CString         compw;
        if(bPD_BSAT_OpenDevice())
       {
       bPD_BSAT_FPInit();
           bPD_BSAT_FPGetSecurityLevel(&securitylevel);
       securitylevel=PD_BSAT_SECURITY_MID;
       bPD_BSAT_FPSetSecurityLevel(securitylevel);
          
       
        m_userinfo.GetWindowText((char *)user,20);
                m_pword.GetWindowText(password,MAX_PATH);
    if(strlen((char *)user)==0)
    {
    m_edit_status.SetWindowText("user name is empty");
    }
    else if(strlen((char *)user)>=20)
    {m_edit_status.SetWindowText("user name is more than 20 byte");} else
    {

                       UI.wcUserName=CharToUnicode(user);
                     CharToUnicode()是转多字符的函数。
      

  4.   

    就是说,要把获取到的一些信息,放到特定的API函数里
      

  5.   

    类型不匹配,
    建议用strcpy或者memcpy
    或者把类型改成统一的
    char *a;
    char *b;
    或者:
    char a[size];
    char b[size];
      

  6.   

     是这个函数吧 CharToUnicode(user); 
     BYTE            user[20]; 
     改为  BYTE  *user;
          user = new BYTE[20];
          .....
          delete  user;
      

  7.   

    我把所有的代码给上void Add::OnButton2() 
    {
    // TODO: Add your control notification handler code here
    int securitylevel;
    int UserIndex=1;
    stPD_BSAT_UserInfo UI;

    m_abort.ShowWindow(SW_SHOW);
    // st_PD_BSAT_FingerInfo FI;
    UI.wcUserName;
    UI.wcPassWord;
    char     username[MAX_PATH];   wchar_t         wcUserName[MAX_STRLEN];
          wchar_t         wcPassWord[MAX_STRLEN];
         // BYTE            user[20];
      BYTE*           user;
      user    =       new BYTE[20];
      char            password[MAX_PATH];
          CString         pw;
      CString         compw;
        if(bPD_BSAT_OpenDevice())
       {
       bPD_BSAT_FPInit();
           bPD_BSAT_FPGetSecurityLevel(&securitylevel);
       securitylevel=PD_BSAT_SECURITY_MID;
       bPD_BSAT_FPSetSecurityLevel(securitylevel);
          
       
        m_userinfo.GetWindowText((char *)user,20);
            m_pword.GetWindowText(password,MAX_PATH);
    if(strlen((char *)user)==0)
    {
    m_edit_status.SetWindowText("user name is empty");
    }
    else if(strlen((char *)user)>=20)
    {m_edit_status.SetWindowText("user name is more than 20 byte");} else
    {

                 //change(user,(BYTE*)wcUserName,strlen(user));
    //unsigned short p[20]=(unsigned short)user;
     //wcscpy(wcUserName,user);
         UI.wcUserName=CharToUnicode(user); 

             memset(&UI, 0x00, sizeof(UI));
                // InvalidateRect(NULL, TRUE);
                // UpdateWindow();
       if(bPD_BSAT_FPStartEnrollUser(1, &UI))
     {
         Enroll();
     }
       
    }
          
       }   
           if(bPD_BSAT_FPGetUserInfo(1, &UI))
       {   
       bPD_BSAT_FPClose(); 
       bPD_BSAT_CloseDevice();
               sprintf(username,"%s",UI.wcUserName);
       m_userinfo.SetWindowText(username);
       m_edit_status.SetWindowText("This finger be enrolled");
       
     //  m_userinfo.SetWindowText(UI.wcUserName);
       
       }   
       

    }
    unsigned short*  Add::CharToUnicode(CString str)  
      {
              int   n=20;   
             
              char   szBuf[40];   
              strncpy(szBuf ,str,n);   
              szBuf[n] = '\0';   
        
              int nAnsiLen=strlen(str);   
        
              int   nUniLen=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,str,nAnsiLen,   
                      NULL,0);   
        
              LPWSTR   pUnicode=(LPWSTR)LocalAlloc(LPTR,nUniLen);   
        
              MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,str,nAnsiLen,   
                      pUnicode,nUniLen);   
        
              ASSERT(pUnicode!=NULL);   
        
              LPWSTR   pBuf=(LPWSTR)LocalAlloc(LPTR,nUniLen);   
              wcsncpy(pBuf,pUnicode,n);   
        
              BOOL   bDefault;   
        
              ZeroMemory(&szBuf,40);   
              WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,pBuf, n,   
                      szBuf,40,NULL,&bDefault);            
              LocalFree(pUnicode);   
              LocalFree(pBuf);   
              return 0;
      } 
      

  8.   

    bPD_BSAT_FPStartEnrollUser(1, &UI)是底层的API函数
      

  9.   

    类型不匹配,不要用等号,你可以复制内存的方法:memcpy,wcscpy.
      

  10.   

    现在报错是在 UI.wcUserName=CharToUnicode(user); 
      

  11.   

    CharToUnicode的返回值是一个指针,当然不能赋给一个数组了,有两种修改方法:
    1、给CharToUnicode再定义一个参数,用此参数带回返回值,该参数可以定义为指针或数组类型,调用时把UI.wcUserName作为参数传过去。
    2、用一个指针变量接收返回值,再用memcpy之类的函数把指针指向的数据复制到数组中。
      

  12.   

    unsigned short*  Add::CharToUnicode(CString str)函数不正确吧  你只有return 0没有返回数组指针似乎
    UI.wcUserName=CharToUnicode(user); //而且 这个类型不匹配一个是数组  一个是指针 不可直接赋值
      

  13.   

    CharToUnicode的返回值是一个指针,当然不能赋给一个数组了,有两种修改方法: 
    1、给CharToUnicode再定义一个参数,用此参数带回返回值,该参数可以定义为指针或数组类型,调用时把UI.wcUserName作为参数传过去。 
    2、用一个指针变量接收返回值,再用memcpy之类的函数把指针指向的数据复制到数组中。那我UI.wcUserName如何获取到数组直呢?
      

  14.   

    memcpy(UI.wcUserName,CharToUnicode(user),20);
    这样的话,程序可以运行,但是会出现该内存不能为READ 的的错误
    咋办?
      

  15.   

    CharToUnicode中你返回的是0,内存当然不能read了
      

  16.   


    BOOL CharToUnicode(LPCSTR lpcszStr, LPWSTR lpwszStr)
    {
        DWORD dwSize;
        dwSize = MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, NULL, 0);
        MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, lpwszStr, dwSize);  
        return TRUE;
    }
      

  17.   

    char* cstr ......;
    wchar_t* wstr = new wchar_t[strlen(cstr)+1];
    CharToUnicode(cstr,wstr);
      

  18.   

    类似如此直接转换void ToWidechar(char* source , wchar_t* dest, unsigned int len)
    {
    MultiByteToWideChar(NULL,CP_ACP,source ,-1,dest,len);
    }
    int main()
    {
        
    char source[20] = "test"; 
    wchar_t wText[20];
    ToWidechar( source , wText, 20);
    wcout << wText << endl;
    return 0;
    }test
    Press any key to continue
      

  19.   

    用同一的格式,Unicode就都用Unicode的