См. Также в документации Swig 2.0 Java-specific section on exception handling.
Чтобы избежать написания шаблона более чем один раз, я создал SWIG макрокоманду поддержку методов, которые бросают один тип C исключение ++ - ловлей, что и бросание соответствующий Java исключение:
WRAP_THROW_EXCEPTION(myCppDeclaration, com::foo::MyCppExceptionClass,
"com.foo.MyException",
"com/foo/MyException");
Вот макрос:
%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
Я очень ценю подробную обратную связь. Вы, по-видимому, всемирный эксперт по этой теме, поздравляю. –
@Steve Townsend LOL, нет! Я только что использовал SWIG с Python и Java. Мне также просто приходилось записывать свой опыт с другими, чтобы они могли извлечь выгоду из моей боли. – wheaties
Спасибо за это. – JamesC