Proxying between C++ exceptions and Java ones
Tom Tromey
tromey@redhat.com
Fri Mar 4 23:57:00 GMT 2005
>>>>> "Waba" == Waba <waba-gcj@waba.be> writes:
Waba> I could of course make another proxy for this class, that catches any
Waba> C++ exception and uses return codes instead, but that isn't very nice,
Waba> especially since the Java class is already some kind of proxy to the C++
Waba> class. Is there any clever way ?
Given that arbitrary C++ exceptions aren't easily representable in
Java, you probably just want to catch them and then throw some Java
exception (or ignore them). In that case, I think this ought to work:
try {
random_cxx_function();
} catch (...) {
throw new SomeJavaException();
}
Waba> I looked a bit at the gcc code, and from initialize_handler_parm in
Waba> gcc/cp/except.c, it seems that what really matters is that the two kinds
Waba> of catch clauses aren't mixed inside the same CU.
Yes. As I understand it, this is an inherent limitation of GCC's
exception handling approach.
Waba> However, <gcj/javaprims.h>, included from any java header, contains
Waba> the #pragma GNU java_exceptions, actually forcing the Java-Exc mode
Waba> inside any CU that handles Java objects. Commenting out this line makes
Waba> my trivial test program work perfectly, although this doesn't mean
Waba> anything.
I think you need this line if you want to actually catch Java
exceptions in your CNI code.
Tom
More information about the Java
mailing list