INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Exception "Catch"



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

04.02.2010, 10:47
Beitrag #1

DaniH Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Oct 2009

2009
2009
en

9400
Deutschland
Exception "Catch"
Hallo,

Ich habe folgendes Problem:

Ich rufe eine .net dll-Funktion auf, welche eine Exception auswirft, wenn ich ihr ein 0 übergebe!
Diese Exception wird dann im Fehler-Cluster angezeigt (Mit dem Code 1172 und dem entsprechende Text, wie im Anhang).

Es ist nun so, dass die Exception ja eine Klasse ist, (in meinem Fall eine "DummyException").
Diese hat wieder Funkionen zur Verfügen, auf die ich zugreifen möchte.

Weiss jemand wie man an diese herankommt?


Besten Dank
Dani

Beispiele in LV2009


Angehängte Datei(en)
Sonstige .vi  ExceptionTest.vi (Größe: 8,78 KB / Downloads: 232)

Sonstige .dll  LabViewExceptionTest.dll (Größe: 5 KB / Downloads: 222)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.02.2010, 10:07
Beitrag #2

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Exception "Catch"
rolfk oder IchSelbst bestimmt..... Wink
Bahn

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.02.2010, 14:03
Beitrag #3

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.698
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Exception "Catch"
Vorab:
Exceptions sind Elemente, mit denen ich mich nicht befasse. Sie dienen zum Abfangen von unvorhersehbaren (das sind per se unvermeidbare Fehler) und unverhergesehenen (das sind per se vermeidbare Fehler, daher solche, die nicht auftreten sollten) Fehlern. Da ich letzteren Typ grundsätzlich vermeide, brauch ich Exceptions nicht, weder in LV noch in Delphi. Vermeiden geht ganz einfach: Vor der Division abfragen, ob der Divisor Null ist.

' schrieb:Es ist nun so, dass die Exception ja eine Klasse ist, (in meinem Fall eine "DummyException").
Ja. Da gebe ich dir recht.
Nur: Was willst du in LV auf Anwenderebene mit Exceptions? Du würdest dann einen Exceptionhandler brauchen, der aber in ein Datenflußprinzip nicht integrierbar wäre.
Wolltest du in einer tieferen Ebene irgendwas beeinflussen, z.B. das Generieren von Error(cluster)-Meldungen, - dann geht das aber schon ins Eingemachte. Sowas mach ich nicht mehr. RolfK kennt sich da bestimmt noch aus.

Zitat:Diese hat wieder Funkionen zur Verfügen, auf die ich zugreifen möchte.
Was ich von Delphi und seinen Exceptions so weiß, ist das nicht besonders viel, was so eine Exception-Class ausmacht. Wie du in LV oder gar .Net an die Methoden der Klasse kommst, weiß ich nicht. Und sowas wie ein OnException in LV auf Anwenderebene zu integrieren, ist bestimmt auch nicht trivial.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.02.2010, 14:35
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Exception "Catch"
' schrieb:rolfk oder IchSelbst bestimmt..... Wink
Bahn

Gruß Markus

Sorry, nein. .Net versuche ich wann immer möglich zu vermeiden. Exceptions auf WinAPI Niveau habe ich grundsätzliche Kenntnisse aber auch nicht wirklich sehr ausführende und ich weiss absolut nicht ob .Net Exceptions intern auf WinAPI Exceptions aufbauen oder ob das ein grundsätzlich anderer Mechanismus ist. Ich denke jedenfalls dass das Abfangen von .Net Exceptions mit WinAPI Exception Mitteln so oder so fast nicht möglich ist, da .Net die WinAPI Exceptions garantiert auf irgendeine Weise wrapt so es sie dann überhaupt als unterliegenden Mechanismus verwendet.

Grundsätzlich denke ich dass man mit .Net Systemaufrufen wohl einen Exceptionhandler installieren kann der dann als .Net Event an ein LabVIEW Callback-VI übergeben wird. Selber bin ich aber genau so wie IchSelbst von Exceptions alles ausser begeistert. Es ist so oder so immer eine "After the fact" Behandlung von Fehlern und man hat eigentlich nur zwei Möglichkeiten dabei. Entweder handelt es sich um einen vorhersehbaren Fehler den man dann in der Exception mühsam wiederherzustellen versucht, oder es ist ein unvorhersehbarer Fehler und dann kann man ausser einem Dialog mit der Mitteilung dass es besser ist die Applikation zu beenden auch nicht wirklich viel tun. Bei vorhersehbaren Fehlern ist es aber viel effektiver um diesen Fehler gar nicht erst auftreten zu lassen.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.02.2010, 21:39
Beitrag #5

DaniH Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Oct 2009

2009
2009
en

9400
Deutschland
Exception "Catch"
Hallo,

Besten Dank für eure Informationen.

Mein System sieht so aus, dass unterhalb meiner .net dll mehrere Gerät angesprochen werden. (Es wird über RS232 kommuniziert)
Diese Geräte können in diverse Fehlerzustände kommen. Z.b. eine Übertemperatur.
Fehler also, die man nicht verhindern kann.

Die Idee ist, dass man das gesamte Fehlerhandling über Exception macht.
Die Exception sind in meinem Fall keine unvorhersehbare Fehler, sondern einfach Fehler die im System auftretten können.
(Gem. meinem Kollegen ist das in der C#/.net Welt so üblich, oder fast ein muss!)
Die Fehler sollen natürlich soweit wie möglich in der dll behandlet werden.
Das Beispiel der Übertemperatur soll jedoch an LabVIEW, (was nur ein GUI darstellt) weitergereicht werden.
So kann der Anwender darauf reagieren, in dem er z.B. das Gerät abschaltet.

Die Exception die in der Dll ausgeworfen wird, ist von der Klasse "Exception" abgleitet, und enthält noch zusätzliche Methonden.
Über dies kann man an weiter Informationen herankommen, wie zum Beispiel, welches Gerät hat den Fehler erzeugt, Zeit, Fehlernummer... u.s.w.


Wie ich aus euren Antworten herauslesen, ist es von LabVIEW (oder grundsätzlicht?) nicht so angedacht, dass man ein Fehlerhandlig mit Exceptions löst. Sondern eher, dass wenn man einen unvorhergesehen Fehler mit dem eigenen Fehlerhandlich nicht abgefangen hat,
man durch die Exception darauf aufmerksam gemacht wird um dies noch nachzuholen.

Besteb Dank!

Dani
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.02.2010, 23:12
Beitrag #6

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.698
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Exception "Catch"
' schrieb:Diese Geräte können in diverse Fehlerzustände kommen. Z.b. eine Übertemperatur. Fehler also, die man nicht verhindern kann.
Eine Übertemperatur ist kein Fehler, sondern ein Zustand, der explizit beachtet werden muss. Eine Übertemperatur kann man mit ganz normalen Funktionen handeln.

Zitat:Die Exception sind in meinem Fall keine unvorhersehbare Fehler, sondern einfach Fehler die im System auftretten können.
Aber doch keine Fehler im System (z.B.) Klimaschrank !

Zitat:(Gem. meinem Kollegen ist das in der C#/.net Welt so üblich, oder fast ein muss!)
Naja, bisher programmiere ich nur in Win32 und in LabVIEW. Auch in Win32 könnte man Fehlerbehandlungen mit Exceptions machen. Ggf. würde das im Fehlerfall auch sehr einfach sein. Nur: Exceptions haben was von brachialer Gewalt. Damit kann man die ganze Unterprogramm-Hierarchie mit einem "Rücksprung" aushebeln. Sowas macht man einfach nicht.

Zitat:Wie ich aus euren Antworten herauslesen, ist es von LabVIEW (oder grundsätzlicht?) nicht so angedacht, dass man ein Fehlerhandlig mit Exceptions löst.
Ich bin der Meinung, dass man eine derartige Fehlerbehandlung grundsätzlich nicht mit Exceptions machen sollte.

Zitat:Sondern eher, dass wenn man einen unvorhergesehen Fehler mit dem eigenen Fehlerhandlich nicht abgefangen hat,
man durch die Exception darauf aufmerksam gemacht wird um dies noch nachzuholen.
Eher so.
Oder z.B. wenn plötzlich die serielle Schnittstelle als solche nicht mehr vorhanden ist.

Mir fällt noch was ein: Eine Exception kann man als "Selbstschutzmechnismus" auffassen. Würde das Ausführen einer Methode innerhalb eines Moduls unmöglich sein, so kann das Modul diese Situation mit einer Exception umgehen - sofern es nicht möglich ist, diese Sitiation nicht doch mit einer spezifischen Methode abzuarbeiten (z.B. einer entsprechenden Rückmeldung). Der Dividierbefehl z.B. muss eine Exception machen, wenn der Divisor Null ist: Durch Null darf er nämlich nicht teilen, Möglichkeiten der Fehlerrückmeldung hat er nicht.

Eigentlich ist es eher eine Philosophiefrage, wo man die Grenze zieht zwischen Exception (= nachlaufende Fehlerbehandlung) und eigener (vorlaufender) Fehlervermeidung.


Zum Schluss noch was:
Wenn du doch die Methoden (und Felder etc.) der Klasse ".Net-Exception" haben willst, warum fragst du dann in einem LabVIEW-Forum für LabVIEW-Anwender? Wäre da nicht ein .Net-Forum besser: Deine DLL soll ja die Exception in .Net machen/auswerten und daraus einen Error-Cluster für LV machen.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
08.02.2010, 00:55 (Dieser Beitrag wurde zuletzt bearbeitet: 08.02.2010 07:40 von rolfk.)
Beitrag #7

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Exception "Catch"
Wie schon eher angetönt denke ich dass man in LabVIEW durchaus .Net Exceptions machen kann. Man muss ganz einfach mit den System Services von .Net arbeiten die wohl sicher irgendwo die Exception Klasse verfügbar machen. Wahrscheinlich wird das so gehen dass man dann wenn so eine Exceptionklasse einmal geöffnet ist, man irgendwie ein .Net Event erhalten kann für bestimmte Exceptions und man dieses dann mittls .Net Eventcallback-VIs in LabVIEW empfangen kann.

Klingt jetzt alles ziemlich um x Ecken herum und ist es eigentlich auch, aber so funktionieren Exceptions nun einmal.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Unhandled exception bei Übergabe eines CArrays abrissbirne 8 9.252 25.04.2008 23:31
Letzter Beitrag: abrissbirne

Gehe zu: