str中存放的是返回的数据,
如果你在调用返回后,需要再处理,那么,作为局部变量当然不行。

解决方案 »

  1.   

    你应该把处理str的代码,写在和RegQueryValue(hRegKey,“message”,NULL,&datatype,(LPBYTE)&str,&datasize);一起的函数里,
    那么,就不需要使用全局变量了。
    如果是在另外处理,那么,还是把它设置为全局变量的好。
      

  2.   

    那在如下的例子中
    LRESULT CALLBACK ReleaseFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
    {
    char UseInput[50],PassInput[50];
    char LandName[50];
    char Regpass[50];
    int flag;

            switch(message)
    {
    case WM_INITDIALOG:
    RegOpenKeyEx(
    HKEY_CURRENT_USER,
    "Soft\\BSPrograms\\land",
    NULL,
    KEY_ALL_ACCESS,
    &hRegKey
    );
    break;
    case WM_COMMAND:
    switch(LOWORD(wParam))
    {
    case IDC_BUTTON7:
       GetDlgItemText(hwnd,IDC_EDIT1,UseInput,50);
       GetDlgItemText(hwnd,IDC_EDIT2,PassInput,50);

    if(strcmp(UseInput,"administrator")==0)
    {
    datasize=sizeof(Regpass)+1;
    RegQueryValueEx(hRegKey,"pass",NULL,&datatype,(LPBYTE)Regpass,&datasize);
    MessageBox(hwnd,Regpass,"ok",MB_OK);
    //flag=strcmp(Regpass,PassInput);
    }

    break;
    }
    RegCloseKey(hRegKey);
    break;
    }

    return 0;
    }
    中,当Regpass设置为全局变量时显示正常,而设置为局部变量时就出现“烫"字样。请帮我看看。
      

  3.   

    可能是:
    1。缓冲区小了;(我也觉得不太可能)
    2。把Regpass作为字符串操作,你在后面补‘/0’了没?(这比较可能)
    3。在使用之前,调用一次ZeroMemory(Regpass,sizeof(Regpass));我也只能想到这么多了
    对了,为什么:
    datasize=sizeof(Regpass)+1;
    而不是
    datasize=sizeof(Regpass);   ?
      

  4.   

    现在很奇怪,如下程序,
    case WM_COMMAND:
    switch(LOWORD(wParam))
    {
    case IDC_BUTTON7:
       GetDlgItemText(hwnd,IDC_EDIT1,UseInput,50);
       GetDlgItemText(hwnd,IDC_EDIT2,PassInput,50);

    if(strcmp(UseInput,"administrator")==0)
    {
    datasize=sizeof(Regpass)+1;
            RegQueryValueEx(hRegKey,"pass",NULL,&datatype,(LPBYTE)Regpass,&datasize);
    MessageBox(hwnd,Regpass,"ok",MB_OK);

    }
    break;
    中,不要if语句时能正常的得出结果,可是使用了if语句后Regpass的值就为空了。能解释一下吗?