jboolean callGenericFunction(CallTempStruct* call, CommonCallbackInfo* info, DCArgs* args, DCValue* result, void* callback) { return followArgsGenericJavaCallback(call, args, info->nParams, info->fParamTypes) && followCallGenericJavaCallback(call, info->fReturnType, result, callback); }
char __cdecl CToJavaCallHandler(DCCallback* callback, DCArgs* args, DCValue* result, void* userdata) { CallTempStruct* call; jthrowable exc; NativeToJavaCallbackCallInfo* info = (NativeToJavaCallbackCallInfo*)userdata; JNIEnv *env = GetEnv(); initCallHandler(NULL, &call, env); BEGIN_TRY(env, call); call->pCallIOs = info->fInfo.fCallIOs; dcMode(call->vm, JNI_CALL_MODE); if (!info->fCallbackInstance) { throwException(env, "Trying to call a null callback instance !"); cleanupCallHandler(call); return info->fInfo.fDCReturnType; } if (0) { float value = dcbArgFloat(args); float ret = (*call->env)->CallFloatMethod(call->env, info->fCallbackInstance, info->fMethod, value); result->f = ret; } else { dcArgPointer(call->vm, (DCpointer)call->env); dcArgPointer(call->vm, info->fCallbackInstance); dcArgPointer(call->vm, info->fMethod); if (info->fIsGenericCallback) { followArgsGenericJavaCallback(call, args, info->fInfo.nParams, info->fInfo.fParamTypes) && followCallGenericJavaCallback(call, info->fInfo.fReturnType, result, (void*)(*env)->CallObjectMethod); } else { followArgs(call, args, info->fInfo.nParams, info->fInfo.fParamTypes, JNI_TRUE, JNI_TRUE) && followCall(call, info->fInfo.fReturnType, result, info->fJNICallFunction, JNI_TRUE, JNI_FALSE); } exc = (*env)->ExceptionOccurred(env); if (exc) { (*env)->ExceptionDescribe(env); printStackTrace(env, exc); //(*env)->ExceptionClear(env); } } cleanupCallHandler(call); END_TRY_BASE(info->fInfo.fEnv, call, cleanupCallHandler(call););