Klassen und Behandlung von Ausnahmen / Fehlern

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
jNizM
Posts: 3183
Joined: 30 Sep 2013, 01:33
Contact:

Klassen und Behandlung von Ausnahmen / Fehlern

Post by jNizM » 29 Jun 2020, 04:15

Moin,

gibt es eigtl. in AHK ein Best Practise, was das Behandlung von Ausnahmen / Fehlern in Klassen angeht? (Exception Handling)

Vorallem, wenn man DllCall's in Methoden auslagert und gerne die Fehler abfangen und trotzdem den Speicher bereinigen will.

Am besten ohne in jeder Methode ein try, catch, finally einzubauen.


Finde das halt sehr unschön, bzw aufgebläht.

Code: Select all

Irgendwas.UserMethode()


class Irgendwas
{
	; === FÜR DIE BENUTZUNG AUßERHALB ===============================
	UserMethode()
	{
		handle := this.OpenHandle()
		Ret_A  := this.MethodeA(handle)
		Ret_B  := this.MethodeB(handle, Ret_A)
		this.Free(handle)
		return Ret_B
	}

	; === INTERN ====================================================
	OpenHandle()
	{
		return DllCall("ÖffneEtwas", "ptr")
	}

	MethodeA(handle)
	{
		try ; probiere
		{
			if !(ret := DllCall("TueIrgendwasA", "ptr", handle, "ptr"))
				throw Exception("TueIrgendwasA: " A_LastError, -1)
			return ret
		}
		catch exception
		{
			throw Exception
		}
		finally ; bereinige wenn fehlschlägt
		{
			if (handle)
				this.Free(handle)
		}
	}

	MethodeB(handle, irgendwasA)
	{
		try ; probiere
		{
			if !(ret := DllCall("TueIrgendwasB", "ptr", handle, "ptr", irgendwasA, "ptr"))
				throw Exception("TueIrgendwasB: " A_LastError, -1)
			return ret
		}
		catch exception
		{
			throw Exception
		}
		finally ; bereinige wenn fehlschlägt
		{
			if (handle)
				this.Free(handle)
		}
	}

	Free(handle)
	{
		DllCall("BereinigeEtwas", "ptr", handle)
	}
}
Oder muss ich den Weg so gehen?
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile

just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Klassen und Behandlung von Ausnahmen / Fehlern

Post by just me » 29 Jun 2020, 05:11

Moin, Moin,

wenn Du in der direkten Umgebung der auslösenden Anweisung eine Fehlerbehandlung durchführen willst, bleibt Dir für von AHK generierte Ausnahmen meiner Meinung nach nichts anderes übrig. Wenn Du - wie im Beispiel - selbst Ausnahmen generierst, sehe ich die Notwendigkeit nicht. DllCall() erzeugt automatische Ausnahmen in AHK 1.1 überhaupt nur dann, wenn die Funktion in einem Try Block steht.

Post Reply

Return to “Ich brauche Hilfe”