Avatar billede bjering Nybegynder
02. september 2004 - 00:07 Der er 9 kommentarer og
1 løsning

nogen der kan quick fikse den her (int, add 1 eller -1)

vidste ikke liige helt hvordan jeg skulle skrive min titel :P

men altså, jeg har den her ting til min netværks system (beskrivelse nedenunder)

-------------
void statusbarmsg(char * todo)
{
    HKEY key;
    char* line0;
    int line1;
    char* line2;
    char* line3;
    char* line4;
    int alluser = 0;

    if (todo == "add")
    {
        alluser = alluser + 1;
    }
    if (todo == "remove")
    {
        alluser = alluser - 1;
    }
    if (todo = "init")
    {
        // do nothing.
    }

    // get max users online allowed from registry
    if (RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Server\\LoginServer", 0, KEY_QUERY_VALUE, &key) == ERROR_SUCCESS)
    {
        DWORD size = 0;
        RegQueryValueEx(key, "MaxUsers", NULL, NULL, NULL, &size);
        BYTE *maxuser = (BYTE *)LocalAlloc(LMEM_ZEROINIT, size);
        if (RegQueryValueEx(key, "MaxUsers", NULL, NULL, maxuser, &size) == ERROR_SUCCESS)
       
        // put the status bar message together
        line0 = " Users Online: ";
        if(alluser == -1)
        {
            line1 = 0;
        }
        else
        {
            line1 = alluser;
        }
        line2 = "/";
        line3 = (char*)maxuser;
        line4 = " (total/max)";

        char* sbbuf = new char[strlen(line0)+sizeof(line1)+strlen(line2)+strlen(line3)+strlen(line4)];
        sprintf(sbbuf,"%s%i%s%s%s",line0,line1,line2,line3,line4);

        // set the status bar message
        SendMessage(hStatus, SB_SETTEXT, 1, (LPARAM)sbbuf);
        LocalFree((HLOCAL)maxuser);
    }
    return;
}
-------------

det jeg gør er, jeg siger

statusbarmsg("init") i min program opstart (virker fint, den skriver "users online 0/100" (100 er min value fra reg.

når en så logger på og er acceptet siger jeg
statusbarmsg("add")
og logger af
statusbarmsg("remove")

den "skulle" så gerne skrive hvor mange der er på, men det gør den jo så ikke...

den skriver 1 hvis der er 1 på, eller 40 på
og 0 hvis en logger af...

nogen der kan sige mig en (forhåbentlig) hurtig fix til det?

takker.
Avatar billede bertelbrander Novice
02. september 2004 - 00:16 #1
1. Problem: Man kan ikke sammenligne indholdet af to char * med ==  (todo == "add"), brug strcmp(todo, "add") som er 0 hvis de to er ens.
Avatar billede bertelbrander Novice
02. september 2004 - 00:20 #2
2: Jeg tror ikke at udregningen for størrelsen for new [strlen(line0)+sizeof(line1)+strlen(line2)+strlen(line3)+strlen(line4)] er rigtig, det var måske lettere at bruge en std::sting eller std::stringstream. Det er specielt sizeof(line1) der er galt.
Avatar billede bjering Nybegynder
02. september 2004 - 00:20 #3
hum, det virker ellers fint, har ikke haft nogen problemer med det, men kan da godt lige rette det for en sikkerheds skyld
Avatar billede bertelbrander Novice
02. september 2004 - 00:23 #4
3: Jeg tror at du skal gemme alluser fra kald til kald.
Avatar billede bertelbrander Novice
02. september 2004 - 00:31 #5
4: Du mangler en delete [] på sbbuf
Avatar billede dilleberg Nybegynder
02. september 2004 - 15:19 #6
6:
>>> if (RegQueryValueEx(key, "MaxUsers", NULL, NULL, maxuser, &size) == ERROR_SUCCESS)
>>>
>>> // put the status bar message together
>>> line0 = " Users Online: ";
...
>>> SendMessage(hStatus, SB_SETTEXT, 1, (LPARAM)sbbuf);
De viste linier efter if(...) skal vel puttes ind i en blok

Er registry værdien "MaxUsers" af typen String ?
I så fald synes jeg den skulle være af typen DWORD.
Det ville være lettere at bruge. (Keep It Simple)

Ad 1:
>>> if (todo = "init")
er altid sand!

Ad 2:
sizeof(line1) er sådan cirka 4, dvs max 9999 users online
En 32 bit int kan max fylde 11 tegn på tekstform (fortegn + 10 cifre)

Ad 3:
static int alluser = 0;
if (strcmp(todo,"init") == 0)
{
  alluser = 0;
}
løser problemet


/db
Avatar billede bjering Nybegynder
02. september 2004 - 18:05 #7
okay prøver det lige.
Avatar billede bjering Nybegynder
02. september 2004 - 18:17 #8
det virkede sådan her :

void statusbarmsg(char * todo)
{
    HKEY key;
    char* line0;
    int line1;
    char* line2;
    char* line3;
    char* line4;
    static int currentuser;
    static int alluser;

    if (strcmp(todo,"add") == 0)
    {
        currentuser = alluser;
        alluser = currentuser + 1;
    }

    if (strcmp(todo,"remove") == 0)
    {
        currentuser = alluser;
        alluser = currentuser - 1;
    }

    if (strcmp(todo,"init") == 0)
    {
        alluser = 0;
    }


    // get max users online allowed from registry
    if (RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Server\\LoginServer", 0, KEY_QUERY_VALUE, &key) == ERROR_SUCCESS)
    {
        DWORD size = 0;
        RegQueryValueEx(key, "MaxUsers", NULL, NULL, NULL, &size);
        BYTE *maxuser = (BYTE *)LocalAlloc(LMEM_ZEROINIT, size);
        if (RegQueryValueEx(key, "MaxUsers", NULL, NULL, maxuser, &size) == ERROR_SUCCESS)
       
        // put the status bar message together
        line0 = " Users Online: ";
        line1 = alluser;
        line2 = "/";
        line3 = (char*)maxuser;
        line4 = " (total/max)";

        char* sbbuf = new char[strlen(line0)+4+strlen(line2)+strlen(line3)+strlen(line4)];
        sprintf(sbbuf,"%s%i%s%s%s",line0,line1,line2,line3,line4);

        // set the status bar message
        SendMessage(hStatus, SB_SETTEXT, 1, (LPARAM)sbbuf);
        LocalFree((HLOCAL)maxuser);
    }
    return;
}

dilleberg, dit svar virkede, så hvis du smider et svar et points'ne dine.

tak.
Avatar billede bertelbrander Novice
02. september 2004 - 18:26 #9
Punkt 2 og 4 er stadig ikke fixet.
Avatar billede bjering Nybegynder
11. november 2005 - 13:40 #10
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester