Сразу для ясности приведу пример:
....
#include "SDK.h"
....
sdkUInt32 sdkSTDCALL mySDKcallback( sdkVoid* pBuf, sdkUInt32 Size, sdkUInt32 Format, sdkContext Context) {
// Вот здесь необходимо вызвать java метод и передать ему pBuf
jclass cls = env->GetObjectClass(jobj);
jmethodID mid = env->GetMethodID(cls, "javaCallback", "([B)V");
if (mid == 0) {
return sdkOK;
}
jbyteArray ba=env->NewByteArray(Size);
env->SetByteArrayRegion(ba,0,Size,(jbyte *)pBuf);
env->CallVoidMethod(obj, mid,ba);
// Но откуда тут взять JNIEnv * env, jobject jobj
retrun sdkOK;
}
....
JNIEXPORT jint JNICALL Java_test_registryCallback(JNIEnv * env, jobject jobj) {
char context = new char[10];
....
SDKregistryCallback(handle,0,mySDKcallback,(sdkContext)context);//context - это, то что можно дополнительно передать в callback фыункцию
}
....