Klassen und Behandlung von Ausnahmen / Fehlern

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

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

Klassen und Behandlung von Ausnahmen / Fehlern

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] 1.1.33.02 x64 Unicode | [WIN] 10 Pro (Version 20H2) x64 | [GitHub] Profile
Donations are appreciated if I could help you
just me
Posts: 7582
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Klassen und Behandlung von Ausnahmen / Fehlern

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.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 5 guests