TStrings -> getKeyNames() -> Fehler (Registry)



  • Hi!
    Bekomme beim Aufrufen dieser Funktion im laufenden Programm ne Fehlermeldung...( glaube EA..., allerdings wenn ich TStrings mit new erstelle kommt vom Compiler ich könne diese Abstrakte Klasse so nicht erstellen o.s.ä.)

    TStrings* TForm1::regload_Tabelle()
    {
      TStrings *s;
      //Eine neues TRegistry Object angelegen
      TRegistry& regkey=*new TRegistry();
      //Wenn abweichend von HKEY_CURRENT_USER den RootKey setzen (das ist ein INT-Wert!!):
      regkey.RootKey=HKEY_LOCAL_MACHINE;
      //Den gewünschten Schlüssel vorgeben
      //hier jetzt false (nur lesen wenn auch da)
      bool keygood=regkey.OpenKey("Software\\Planer",false);
      //Wenn ein gültiger Schlüssel da ist
      if(keygood)
      {
        //Wenn unser Wert da ist
        if(regkey.ValueExists("Sprache"))
        {
          //wird er in die Variable bo (bool) gelesen
          regkey.GetKeyNames(s);
        }else{ sprache = 1; }
      }
      //Registry schliessen
      regkey.CloseKey();
      //Objekt löschen
      delete &regkey;
    
      return s;
    }
    //---------------------------------------------------------------------------
    

    thx



  • Hallo

    TStrings ist wie der Compiler und auch die BCB-Hilfe dir sagt eine abstrakte Basisklasse, nur ein Interface. Es hat keine Implementation.
    Du must TStringList als Instanz nehmen, diese Klasse ist von TStrings abgeleitet und ist dank Polymorphie als Pointer in einen Pointer von TStrings umwandelbar.

    TStrings *s = new TStringList;
    

    Ich empfehle die Grundlagen von OOP in C++ zu lernen.

    bis bald
    akari



  • s ist NULL und darum wird das natürlich nix. Wie du schon bemerkt hast, kann man TStrings nicht instanzieren. TStringList aber schon 😉
    Und TStringList sollte prinzipiell von der Funktion akzeptiert werden.

    mfg
    xXx

    Edit: zu spät 😃



  • @akari nur weil ich mich mit polymorphi nicht so doll auskenn muss das doch net heißen das ich kein oop kann... *heul* ^^

    ABER: ein GROßES DANKESCHÖN 😃



  • Hallo

    Das Problem ist das aber grade die VCL des Builders sehr stark auf Polymorphie aufsetzt. Das fängt schon an wenn du aus einem Standard-Event den Parameter Sender als eine bestimmte Komponentenart behandeln willst. Ohne das Wissen über Sinn und Anwendung von Polymorphie kommst du da nicht weit 😉

    bis bald
    akari



  • Da könntest du recht haben, ich werd mir deinen Vorschlag zu Herzen nehmen, und mir mal die Polymorphie reinziehen. 😃


Anmelden zum Antworten