关于注册表的读写 str中存放的是返回的数据,如果你在调用返回后,需要再处理,那么,作为局部变量当然不行。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你应该把处理str的代码,写在和RegQueryValue(hRegKey,“message”,NULL,&datatype,(LPBYTE)&str,&datasize);一起的函数里,那么,就不需要使用全局变量了。如果是在另外处理,那么,还是把它设置为全局变量的好。 那在如下的例子中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设置为全局变量时显示正常,而设置为局部变量时就出现“烫"字样。请帮我看看。 可能是:1。缓冲区小了;(我也觉得不太可能)2。把Regpass作为字符串操作,你在后面补‘/0’了没?(这比较可能)3。在使用之前,调用一次ZeroMemory(Regpass,sizeof(Regpass));我也只能想到这么多了对了,为什么:datasize=sizeof(Regpass)+1;而不是datasize=sizeof(Regpass); ? 现在很奇怪,如下程序,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的值就为空了。能解释一下吗? DLL里面的窗体怎么调试? 在线求问一个串口收发的问题,小弟分少,望大侠不吝赐教! 用Visual assist时的一个问题 一个简单的操作问题 如何消除一个头文件不能被多个文件include 请高手看一看 进来看看List的麻烦问题。 ADO与VC6.0 windows media player插件问题 WM_SETTEXT 消息 小小小问题 PTR 类型
那么,就不需要使用全局变量了。
如果是在另外处理,那么,还是把它设置为全局变量的好。
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设置为全局变量时显示正常,而设置为局部变量时就出现“烫"字样。请帮我看看。
1。缓冲区小了;(我也觉得不太可能)
2。把Regpass作为字符串操作,你在后面补‘/0’了没?(这比较可能)
3。在使用之前,调用一次ZeroMemory(Regpass,sizeof(Regpass));我也只能想到这么多了
对了,为什么:
datasize=sizeof(Regpass)+1;
而不是
datasize=sizeof(Regpass); ?
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的值就为空了。能解释一下吗?