Announcement

Collapse
No announcement yet.

Absturz bei Funktion

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Absturz bei Funktion

    Hallo zusammen !<br>

    Kann mir jemand sagen warum dieses Programm eine Exception der Klasse EAccessViolation auslöst ?
    <br>
    <br>
    void Abc(void);<br>
    void Abc(void)<br>
    {<br>
    Form1->Caption="Hallo";<br>
    }<br>
    <br>
    .....<br>
    <br>
    void __fastcall TForm1::Button1Click(TObject *Sender)<br>
    {<br>
    Abc();<br>
    }<br>
    <br>

    In der Schule haben wir die Erfahrung gemacht, dass wenn wir Konsolenanwendungen programmieren und Programmteile in Funktionen schreiben das wir öfters Zugriffsverletzungen bekommen aber wenn
    wir ohne selbstgemachte Funktionen arbeiten der Quellcode einwandfrei funktioniert. Hat jemand die gleiche Erfahrung gemacht ?<br>

    Mfg Tobias

  • #2
    HI,

    bei mir haben bisher immer alle Funktionen funktioniert. Ver such doch mal die Funktion in der Header zu deklarieren.

    private:

    void __fastcall Abc();

    Und in der CPP Datei bearbeitest du die Funktion

    void __fastcall TForm1::Abc()
    {
    Form1->Caption="Hallo";
    }

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Abc(); // Form1->Abc();
    }

    Probier mal dieses aus. Das man C++ der Schule hat, habe ich noch nie erlebt, würde ich auch gerne haben, ist bei uns aber nicht angeboten.

    Ciao Philip

    Comment


    • #3
      Funktioniert leider auch nicht.<br>
      Was mich verwundert ist das eine Zugriffsverletzung in Modul OLE32.DLL kommt.
      Trotzdem danke für den Tipp.
      Mfg Tobia

      Comment


      • #4
        Hallo

        Wenn du die CPP und Header Datei so abgeändert hast wie dir Philipp gesagt hat, dann musst du soviel ich weis, die Zeile Form1->Caption="Hallo"; anders schreiben.
        Probier mal Caption="Hallo"; damit änderst du den Titel des Formulars zur Laufzeit.

        Gruss<BR>
        Marco Vergar

        Comment


        • #5
          Hallo,

          Caption = "Hallo"; und Form1->Caption = "Hallo"; ist dasselbe, wenn man z.B. nur ein Projekt mit einem Formular hat. Aber wenn der Fehler in der OLE32.dll ist, dann guck doch mal, welche BPL in deinem Projekt geladen sind und entferne das.

          Benutzt du den C++ Builder?

          Ciao Philip

          Comment


          • #6
            Hallo,<br>

            erst mal ja, ich benutze C++ Builder (Version 5 Professional).<br>
            Also wenn ich die Sache mache wie Philipp es gesagt hat und das
            "Form1->" weglassen funktioniert es. Wenn ich das "Form1->" davor schreibe stürzt er wieder ab.

            <br>MfG Tobia

            Comment


            • #7
              Hallo<br><br>

              Das Problem ist, dass du das Formular automatisch erstellst wenn das Programm gestartet wird. Dadurch ist der Zeiger (Form1->) nicht initialisiert. Wenn du ein Form erst zur Laufzeit erstellst, dann funktioniert das mit dem Form1->Caption. Alle Eigenschaften des Form1 kannst du direkt ohne Form1-> aufrufen.<br>
              Zum Beispiel:
              Top=23<br>
              Left=5<br>
              Visible=false<br><br>

              Gruss<BR>
              Marco Vergar

              Comment


              • #8
                Hallo,<br>

                ich hatte meine Funktion nur an der falschen Stelle deklariert.
                Wenn der Zeiger auf Form1 nach der Deklaration der Funktion kommt funktioniert die ganze Sache nicht:<br>

                void Abc (void);<br>
                void Abc (void)<br>
                {<br>
                Form1->Caption="Hallo";<br>
                }<br>
                <b>TForm1 *Form1;</b><br><br>
                so funktioniert es aber:<p>
                <b>TForm1 *Form1;</b><br>
                void Abc (void);<br>
                void Abc (void)<br>
                {<br>
                Form1->Caption="Hallo";<br>
                }<br>
                Ich hatte die Deklaration des Zeiger unter der, der Funktion und deshalb ist er abgestürzt. <br>
                Jetzt funktioniert es, ob mit oder ohne "Form1->".<br>Nochmals vielen Dank an alle !<br>
                MfG Tobia

                Comment

                Working...
                X