C++ builer - GetValueNames

0

mam taki kod:
<program.h>
TString* Strings
<prgram.cpp>
TRegistry& Rejestr = *new TRegistry();
Rejestr.RootKey = HKEY_CURRENT_USER;
Rejestr.OpenKey("\uruchom", true);
Rejestr.GetValueNames(Strings);
delete &Rejestr;

nie wiem dlaczego wyskakuje blad: Access violation..... Jak ktos wie dlaczego to był bym wdzieczny za wskazówki. Druga sprawa: Chcialem pobrac z rejestru z klucza HKEY_CURRENT_USER\uruchom pobrac NAZWY(mniemam ze GetValueNames bierze tylko nazwy a nie dane) i wrzucic je do ComboBox->Items. Inna sprawa, że też nie za bardzo wiem jak to zrobić, bo chyba taki kod nie zadziała
ComboBox1->Items=Strings;
Proszę o pomoc!!

0
TRegistry* Rejestr = new TRegistry();
Rejestr->RootKey = HKEY_CURRENT_USER; // tak
(*Rejestr).OpenKey("\\uruchom", true); // albo tak
Rejestr->GetValueNames(Strings);
delete Rejestr;

// do postu ponizej...
No fakt właściwie nie ma różnicy.
Co do błedu TStrings to też klasa i też potrzebuje wywołania konstruktora.
po prostu wywal '' z deklaracji TString Strings;

0

Flabra to co napisales zgadza sie z tym co ja napisalem :) Jest inaczej ale to to samo przez to ze uzywam Tregistry& Rejestr=new* Tregistry()
potem moge sie odwolywac Rejestr.OpenKey a nie Rejestr->OpenKey ale to nie ma różnicy. Problem lezy w:
Rejestr.GetValueNames(Strings);
delete &Rejestr;
tu wyskakuje blad.
Jak chcĘ zapisac uzywam:
TRegistry& Rejestr = *new TRegistry();
Rejestr.RootKey = HKEY_CURRENT_USER;
Rejestr.OpenKey("\uruchom", true);
Rejestr.WriteString(Edit3->Text.c_str(),filename);
delete &Rejestr;
i wszystko dziala cacy. Tylko GetValueNames nie dziala!!!!

0

Chciałbym zwrócić uwagę że Tstrings jest klasą wirtualną! i nie można jej tak wywołać. A rozwiązanie problemu jest proste ponieważ klasie TStrings odpowiada TStringList!

wiec powinno wyglądać to tak:

<prgram.cpp>
TStringList *Strings = new TStringList;
TRegistry&amp; Rejestr = *new TRegistry();
Rejestr.RootKey = HKEY_CURRENT_USER;
Rejestr.OpenKey("\\uruchom", true);
Rejestr.GetValueNames(Strings);
delete &amp;Rejestr;
delete Strings;

nie chce mi się instalować Buildera ale powinno działać!</cpp>

0

Tak ściślej to klasą abstrakcyjną, ale nie żebym się czepiał :)

Scrooge: Problem polegał na tym, że utworzyłeś wskaźnik typu TStrings, który zresztą mógłby bez problemu wskazywać na istniejący już obiekt klasy TStringList dla której TStrings jest klasą bazową, ale nie utworzyłeś takiego obiektu (wymaga właśnie operatora new, itd).

1 użytkowników online, w tym zalogowanych: 0, gości: 1