Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » ein Registry Prob. beim auslesen der Werte....

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.02.2006, 21:00 Uhr
darksoul86



Hallöchen!

Hab ein Problem mit beim auslesen.

Also zunächst einmal hab ich meine benötigten Werte wie folgt in die Reg geschrieben:



Dann versuche ich wie folgt die 50 Strings aus der Reg auszulesen:


C++:
CRegKey key;
char buffer[256]
DWORD dwCount = sizeof( buffer);
CString tmp;

if(key.Open( HKEY_CURRENT_USER, "Software\\FBSoft\\Abiplaner\\TimeTable", KEY_READ) == ERROR_SUCCESS)
    {
    for(int i=0;i<50;i++)
    {
        tmp.Format("%d",i);
        key.QueryStringValue(tmp,buffer,&dwCount);
        time->Add(buffer);
        strcpy(buffer,"");
    }
    key.close();
    }
else
{
    AfxMessageBox("Fehler");
    SetRegDefaultTimeTable();
}



Aber ab dem 10. Wert sprich wie auf dem Bild zu sehen is steht ab 9:40 immer nur noch 9:40 drin. Hab sogar schon versucht alle Werte ohne Schleife auszulesen, aber selbst das hat nicht geklappt. Ich kann mir leider nicht erklären wie es so ist...

Vielen Dank schonmal für eure Hilfe!

Basti
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.02.2006, 01:03 Uhr
mmc20
puss in boots


hi, überprüf mal deinen "dwCount", der wird sicherlich irgendwann "0"... und dann geht halt nichts mehr in den puffer rein.
also besser:

C++:
        tmp.Format("%d",i);
        dwCount = 12; // mehr brauchst für die uhrzeit eh nicht
        key.QueryStringValue(tmp,buffer,&dwCount);
        if ( dwCount > 0 )
               time->Add(buffer);
        else
               AfxMessageBox("nix gelesen");
        strcpy(buffer,"");

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.02.2006, 11:16 Uhr
ao

(Operator)


Zitat aus http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/vclrfcregkeyquerystringvalue.asp :

Zitat von msdn:

LONG QueryStringValue(
LPCTSTR pszValueName,
LPTSTR pszValue,
ULONG* pnChars
) throw( );
Parameters
....
pnChars
The size, in TCHARs, of the buffer pointed to by pszValue. When the method returns, pnChars contains the size, in TCHARs, of the string retrieved


D.h., dein dwCount wird von QueryStringValue verändert, also vor jedem Aufruf neu setzen! Sagte mmc20 auch schon. Außerdem:

Zitat:
Return Value
If the method succeeds, ERROR_SUCCESS is returned. If the method fails to read a value, it returns a nonzero error code defined in WINERROR.H. If the data referenced is not of type REG_SZ, ERROR_INVALID_DATA is returned.

Es ist immer eine gute Idee, die Rückgabe abzuholen und zu prüfen.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.02.2006, 21:48 Uhr
darksoul86



Genau das Problem! Vielen Dank!!

Habs jetzt wie folgt gelöst:


C++:
        CRegKey key;
        CString tmp;

        if(key.Open( HKEY_CURRENT_USER, "Software\\FBSoft\\Abiplaner\\TimeTable", KEY_READ) == ERROR_SUCCESS)
        {

            for(int i=0;i<50;i++)
            {
                char *tempBuf = new char[256];
                tmp.Format("%d",i);
                DWORD tempWord = sizeof(char[256]);
                key.QueryStringValue(tmp,tempBuf,&tempWord);
                time->Add(tempBuf);
                delete tempBuf;    
            }
            
        }

        else
        {
            AfxMessageBox("Fehler beim Laden des Zeitrasters!\nDie Standartwerte werden geladen...", MB_ICONEXCLAMATION);
            SetRegDefaultTimeTable();
            key.Close();
        }
    key.Close();

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.02.2006, 23:15 Uhr
mmc20
puss in boots


... wenn schon c++ und MFC, dann so:

C++:
        CRegKey key;
        CString temp1, temp2;
        DWORD dwLen;

        if ( key.Open( HKEY_CURRENT_USER, "Software\\FBSoft\\Abiplaner\\TimeTable", KEY_READ) == ERROR_SUCCESS ) {

            for ( int i=0; i<50; i++ ) {
                temp1.Format("%d",i);
                dwLen = MAX_PATH;
                key.QueryValue( temp2.GetBuffer(dwLen), temp1, &dwLen);
                temp2.ReleaseBuffer();
                time->Add(temp2);
            }
        } else {
            AfxMessageBox("Fehler beim Laden des Zeitrasters!\nDie Standartwerte werden geladen...", MB_ICONEXCLAMATION);
            SetRegDefaultTimeTable();
            key.Close();
        }
        key.Close();


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: