JNI Calls different in C vs C++?

I used to have the book Essential JNI. And while it is kinda dated (1998), much of it still works today.

If I recall correctly, in C, Java constructs are simply pointers. Thus, in your code, (*env)-> is dereferencing pointers to give you access to the underlying methods.

For C++, env is actually an object – a different entity than a C pointer. (And JNI can actually provide real objects for your C++ code to manipulate, since C++ actually supports objects.) So env-> has a different meaning in C++, it means “call the method that is contained in the object pointed to by env.

The other difference, I believe, is that many of the C-JNI functions require that one of your parameters be the JNIEnv *env. So in C you might have to say (*env)->foo(env, bar). With C++, the second reference to env is not necessary, so you can instead say env->foo(bar).

Unfortunately, I don’t have the above book in front of me, so I can’t quite confirm this! But I think investigating those two things (specifically looking for them on Google or in other JNI code) will get you pretty far.

Leave a Comment