Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

JNA should include std::exception::what() in thrown `java.lang.Error`

Ouverte
#1,192 5 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
25/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
cpp, java
Domaine
backend, tooling

Piste de recherche

Commencez par le chemin de liaison de Native.loadLibrary et tracez comment un std::exception natif devient une java.lang.Error. Comparez ce chemin avec le contournement InvocationMapper et GetLastError de l'issue. C'est terminé lorsque l'erreur levée inclut std::exception::what() au lieu de signaler uniquement un accès mémoire invalide, avec le comportement vérifié par rapport à l'exemple Windows.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

feature request

As a caller of a cpp hunk of math I want std::exceptions to be nicely translated by JNA across the bindings so that I can more easily debug runtime problems.

I have some cpp code that I've updated to throw std::exception's that contain valuable data in their what() clause. What I was hoping JNA would do is this:

//mylib.dll
#include <exception>

extern "C" __declspec(dllexport) 
const void MYCOMPANY_compute_eigen_values_or_something()
{
  throw std::exception("message from native code: kablamo!")
}
interface MyLib: Library {
  public void MYCOMPANY_compute_eigen_values_or_something()
}
var lib = Native.loadLibrary("mylib", MyLib.class, options)
try { lib.MYCOMPANY_compute_eigen_values_or_something() }
catch(Throwable ex){
  System.out.println(ex)
}

expected: java.lang.Error: In native code: message from native code: kablamo!
actual: java.lang.Error: Invalid memory access

... on: Windows 10 1903, JNA 4.2.2


My work around:
Wrap my code in a try { } catch { }, save it to a global variable, and expose a function GetLastError() that I then call from the handler. If you combine this with StackWalker you can even get a java--ish native code stack trace in your preconditions/postconditions. From the java side, I add my own InvocationMapper to catch JNA thrown java.lang.Errors, call GetLastError() then throw a new exception with the results.

Langage dominant
Java
Étoiles
8.9k
Forks
1.7k
Merge moyen
1 j 13 h
PR mergées (30 j)
1

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de java-native-access/jna

Toutes les issues de java-native-access/jna

Issues similaires

Plus d'issues Java

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.