Fehler bei Aufruf von selbstgeschriebener Prozedur!



  • Ich habe mir eine Prozedur selber geschrieben! Die funktioniert sogar in einem Formular. Jetzt habe ich diese in ein anderes Formular kopiert und bekomme immer einen Zugriffsverletzungsfehler!

    Erste Gelegenheit für Exception bei $7584E124. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 004C576F in Modul 'RekonProjekt.exe'. Lesen von Adresse 000002A0'. Prozess RekonProjekt.exe (10176)

    Die Deklaration in der .h-Datei:

    public:
    	wchar_t TAuftragNeuForm::nur_ganze_Zahlen(TObject *, wchar_t &, int);
    	wchar_t TAuftragNeuForm::nur_Euro_Zahlen(TObject *, wchar_t &);
    
    ...
    
    wchar_t TAuftragNeuForm::nur_ganze_Zahlen(TObject *Sender, wchar_t &Key, int len)
    {
    	TDBEdit* pEdit2 = dynamic_cast<TDBEdit*>(Sender);
    	if (!isdigit(Key) && Key != VK_BACK) {
    		MessageBeep(0);
    		return 0;
    	}
    	else if ((pEdit2->Text.Length() >= len) && (Key != VK_BACK)) {
    		MessageBeep(0);
    		return 0;
    	}
    	return Key;
    }
    //---------------------------------------------------------------------------
    
    wchar_t TAuftragNeuForm::nur_Euro_Zahlen(TObject *Sender, wchar_t &Key)
    {
    	TDBEdit* pEdit2 = dynamic_cast<TDBEdit*>(Sender);
    	if ((Key == ',') && (!pEdit2->Text.Pos(DecimalSeparator)) && ((pEdit2->Text.Length() - pEdit2->SelStart <= 2)))
    		return DecimalSeparator ;
    	else if (Key == '\b') {
    
    	}
    	else if (!isdigit(Key)) {
    		MessageBeep(0) ;
    		return 0 ;
    	}
    		else if ((pEdit2->Text.Length() - pEdit2->Text.Pos(DecimalSeparator)) >= 2 && pEdit2->Text.Pos(DecimalSeparator) && (pEdit2->SelStart - pEdit2->Text.Pos(DecimalSeparator) + 1)) {
    		MessageBeep(0) ;
    		return 0 ;
    	}
    	return Key ;
    }
    

    Der Aufruf in der .cpp-Datei:

    void __fastcall TAuftragNeuForm::ReserveEditKeyPress(TObject *Sender, wchar_t &Key)
    {
    	Key = nur_ganze_Zahlen(Sender, Key, 2) ;
    }
    


  • MichelM schrieb:

    Ich habe mir eine Prozedur selber geschrieben! Die funktioniert sogar in einem Formular.

    WOW!

    MichelM schrieb:

    Jetzt habe ich diese in ein anderes Formular kopiert und bekomme immer einen Zugriffsverletzungsfehler!

    Schau doch mal mit dem Debugger wo er hängt. Möglicherweise ergibt der dynamic_cast 0 weil das Textfeld kein TDBEdit ist.



  • Man sollte das Ergebnis eines dynamic_cast sowieso immer vor Verwendung testen.


Anmelden zum Antworten