Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Verwendung von JNI und abgefangene Exeption in Java-Teil (https://www.delphipraxis.net/81202-verwendung-von-jni-und-abgefangene-exeption-java-teil.html)

Bernhard Geyer 22. Nov 2006 13:56


Verwendung von JNI und abgefangene Exeption in Java-Teil
 
Hallo,

ich binde über JNI eine DLL eine welche eine Javacomponente beinhaltet welche mit einem Java-Compiler in eine Exe kompiliert wurde. Diese läuft wenn Sie nicht in der IDE gestartet wurde wunderbar durch. Jedoch beim Start in der IDE kommt bei diversen Funktionen (immer die gleichen) folgende Exception welche die Delphi-IDE zum stoppen bringt.


---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Workbench.exe ist eine Exception der Klasse C0000005 aufgetreten. Meldung: 'access violation at 0x0a398915: read of address 0x00000000'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------

Ich denke mal das ist eine (abgefangene) Exception im Java-Teil. Aber wieso kommt dies zu meiner IDE durch und wie könnte ich das abschalten das ich jedesmal dort hängen bleibe.

Der_Unwissende 22. Nov 2006 14:28

Re: Verwendung von JNI und abgefangene Exeption in Java-Teil
 
Zitat:

Zitat von Bernhard Geyer
ich binde über JNI eine DLL eine welche eine Javacomponente beinhaltet welche mit einem Java-Compiler in eine Exe kompiliert wurde.

Du machst was? Wenn du eine DLL über JNI anbindest, dann hieße dass das du gerade mit Java arbeitest. Wie du mit dem Java-Compiler eine Exe erstellt hast wäre natürlich auch interessant (gcc oder welcher Compiler?). Also mir ist im Moment nicht ganz klar, was du hier wo einbindest. Wenn du eine DLL hast, die du unter Delphi einbindest, dann sehe ich nicht was das mit einer .exe oder JNI zu tun hat.

Zitat:

Zitat von Bernhard Geyer
Ich denke mal das ist eine (abgefangene) Exception im Java-Teil. Aber wieso kommt dies zu meiner IDE durch und wie könnte ich das abschalten das ich jedesmal dort hängen bleibe.

Nun ja, du kannst in den Debugger Optionen einstellen, dass du generell bei Exceptions nicht halten möchtest und die BS-Exceptions kennen dann auch die Schutzverletzung C0000005, auch hier kannst du dann das Verhalten einstellen. Ansonsten kannst du natürlich auch einfach einen Wrapper verwenden, der eine Fassade für die Funktionen der DLL darstellt, die alle in einem Try Catch Block aufgerufen werden.

Gruß Der Unwissende

Bernhard Geyer 22. Nov 2006 14:48

Re: Verwendung von JNI und abgefangene Exeption in Java-Teil
 
Zitat:

Zitat von Der_Unwissende
Du machst was? Wenn du eine DLL über JNI anbindest, dann hieße dass das du gerade mit Java arbeitest. Wie du mit dem Java-Compiler eine Exe erstellt hast wäre natürlich auch interessant (gcc oder welcher Compiler?). Also mir ist im Moment nicht ganz klar, was du hier wo einbindest. Wenn du eine DLL hast, die du unter Delphi einbindest, dann sehe ich nicht was das mit einer .exe oder JNI zu tun hat.

Die Exe wird mit dem Compiler von excelsior erzeugt. Die JNI-Anbindung erfolgt mit gesetzten Schalter DYNAMIC_LINKING in der JNI.pas-Datei

Zitat:

Zitat von Bernhard Geyer
Nun ja, du kannst in den Debugger Optionen einstellen, dass du generell bei Exceptions nicht halten möchtest und die BS-Exceptions kennen dann auch die Schutzverletzung C0000005, auch hier kannst du dann das Verhalten einstellen. Ansonsten kannst du natürlich auch einfach einen Wrapper verwenden, der eine Fassade für die Funktionen der DLL darstellt, die alle in einem Try Catch Block aufgerufen werden.

Diese Reiterseite BS-Exceptions war's. Dort kann ich C0000005 abhacken.
Wie kann ich das aber per {$ - Angabe nur für eine Unit bzw. für Codeabschnitte abschalten. In anderen Bereichen meines Programms will ich gern in der IDE Informiert werdenn wenn sowas auftritt.

Bernhard Geyer 28. Nov 2006 10:00

Re: Verwendung von JNI und abgefangene Exeption in Java-Teil
 
*Push*

Nochmal anders erklärt:

Wie kann ich in der IDE einstellen das eine BS-Exception von einem bestimmten Typ in einer Unit nicht berücksichtigt wird oder eine bestimmte DLL nicht berücksichtigt wird.

MarcoWarm 28. Nov 2006 10:18

Re: Verwendung von JNI und abgefangene Exeption in Java-Teil
 
Zitat:

Zitat von Bernhard Geyer
Wie kann ich in der IDE einstellen das eine BS-Exception von einem bestimmten Typ in einer Unit nicht berücksichtigt wird oder eine bestimmte DLL nicht berücksichtigt wird.

Das kannst du IMO gar nicht. Der Debugger betrachtet immer die gesamte Anwendung.

Zitat:

Zitat von Bernhard Geyer
In anderen Bereichen meines Programms will ich gern in der IDE Informiert werdenn wenn sowas auftritt.

Würde Dein Programm trotz dieser Exception weiter korrekt funktionieren? Das kann ich mir beim besten Willen nicht vorstellen. Die Exception sieht so auß, als ob das java Dingens versucht ein nicht initialisiertes Objekt zu lesen oder zu schreiben. Ob das so gesund ist? :gruebel:
Wenn du die Exceptionwarnung abschaltest und das Programm trotzdem funktioniert wurde die Exception wahrscheinlich schon in der DLL gehandled (sehr unfein, wie ich bemerken darf). Wenn dir in deiner eigenen Anwendung sowas unterkommt (eine unbehandelte Schutzverletzung) wird dich das OS sicher freundlich darauf hinweisen :twisted: Du verpasst also nichts

Bernhard Geyer 28. Nov 2006 10:54

Re: Verwendung von JNI und abgefangene Exeption in Java-Teil
 
Zitat:

Zitat von MarcoWarm
Würde Dein Programm trotz dieser Exception weiter korrekt funktionieren? Das kann ich mir beim besten Willen nicht vorstellen. Die Exception sieht so auß, als ob das java Dingens versucht ein nicht initialisiertes Objekt zu lesen oder zu schreiben. Ob das so gesund ist? :gruebel:

Diese Exeption ist auf Java-Seite abgefangen und kommt nur durch, da hier über den "Windows Hardware Exception mechanism" (aussage des Excelsior-Herstellres) abgearbeitet wird und nunmal der Delphi-Debugger dort auch "Lauscht".

Zitat:

Zitat von MarcoWarm
Wenn du die Exceptionwarnung abschaltest und das Programm trotzdem funktioniert wurde die Exception wahrscheinlich schon in der DLL gehandled (sehr unfein, wie ich bemerken darf).

Ist ein Riesen-Projekt das ich hier einbinde und kann da schlecht was am Code ändern.

Zitat:

Zitat von MarcoWarm
Wenn dir in deiner eigenen Anwendung sowas unterkommt (eine unbehandelte Schutzverletzung) wird dich das OS sicher freundlich darauf hinweisen :twisted: Du verpasst also nichts

Ich würde halt auch mitbekommen wenn in anderen DLL's sowas auftritt.
Aber wenns nicht geht - Unschön aber kann man dann wohl nichts machen (außer Javacode ändern):


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz