Re: JNI and GetFieldID
On 06/09/13 21:44, Borneq wrote:
public interface ICallback {
void OnPercent(int percent);
void OnPercentEx(CmplxStruct cs);
}
While in Java, you should use Java conventions, e.g. onPercent for a
method name. Can't say I'm a fan of prefixing "Callback" with "I" to
show it's an interface either.
public class CmplxStruct {
int fieldI;
String str;
}
CmplxStruct? Ky, 'll tk tht s jst n ex.
How place number and string?
jmethodID mid;
mid = env->GetMethodID(cls, "OnPercentEx", "(LCmplxStruct;)V");
env->CallVoidMethod(param1, mid, SOMETHING);
how fill SOMETHING?
Never learned to do that - looks too error-prone. Instead of mucking
around in JNI, creating objects, accessing fields, etc, I prefer to do
as much as I can in Java, then declare the native methods as taking the
already dismantled fields as separate arguments.
You could do similar for a callback. Write a private static method to
do the fiddly stuff:
private static void callBack(ICallback dest, int i, String s) {
CmplxStruct obj = new CmplxStruct();
obj.fieldI = i;
obj.str = s;
dest.OnPercentEx(obj);
}
Now, in JNI, you use something like:
jobject dest = ...;
jint i = ...;
jstring s = ...;
mid = env->GetStaticMethodID(cls, "callBack", "(LICallback;ILjava/lang/String;)V");
env->CallStaticVoidMethod(dest, i, s);
--
ss at comp dot lancs dot ac dot uk