Vedere anche nella documentazione di Swig 2.0 questo Java-specific section on exception handling.
Per evitare di scrivere il modello più di una volta, ho creato una macro SWIG sostenere metodi che gettano un tipo di C eccezione ++ - con la cattura che e gettando un'eccezione Java corrispondente:
WRAP_THROW_EXCEPTION(myCppDeclaration, com::foo::MyCppExceptionClass,
"com.foo.MyException",
"com/foo/MyException");
Ecco la macro:
%define WRAP_THROW_EXCEPTION(MATCH, CPPTYPE, JTYPE, JNITYPE)
%javaexception(JTYPE) MATCH {
try {
$action
}
catch (CPPTYPE & e) {
jclass eclass = jenv->FindClass(JNITYPE);
if (eclass) {
jenv->ThrowNew(eclass, e.what());
}
}
}
%enddef
fonte
2010-11-11 18:44:45
Apprezzo molto il feedback dettagliato. Sei apparentemente l'esperto mondiale su questo argomento, congratulazioni. –
@Steve Townsend lol, no! Ho appena usato SWIG con Python e Java. Mi è anche capitato di scrivere le mie esperienze con gli altri in modo che potessero beneficiare/condividere il mio dolore. – wheaties
Grazie per questo. – JamesC