char __cdecl JavaToObjCCallHandler(DCCallback* callback, DCArgs* args, DCValue* result, void* userdata) { JavaToObjCCallInfo* info = (JavaToObjCCallInfo*)userdata; CallTempStruct* call; jobject instance = initCallHandler(args, &call, NULL, &info->fInfo); JNIEnv* env = call->env; BEGIN_TRY(env, call); call->pCallIOs = info->fInfo.fCallIOs; void* targetId = info->fNativeClass ? JLONG_TO_PTR(info->fNativeClass) : getNativeObjectPointer(env, instance, NULL); void* callback = //objc_msgSend_stret;// objc_msgSend; #if defined(DC__Arch_Intel_x86) switch (info->fInfo.fReturnType) { case eDoubleValue: case eFloatValue: callback = objc_msgSend_fpret; break; } #endif dcMode(call->vm, info->fInfo.fDCMode); dcArgPointer(call->vm, targetId); dcArgPointer(call->vm, info->fSelector); followArgs(call, args, info->fInfo.nParams, info->fInfo.fParamTypes, JNI_FALSE, JNI_TRUE)// TODO isVarArgs ?? && followCall(call, info->fInfo.fReturnType, result, callback, JNI_FALSE, JNI_FALSE); cleanupCallHandler(call); END_TRY_BASE(info->fInfo.fEnv, call, cleanupCallHandler(call););
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););
char __cdecl JavaToFunctionCallHandler(DCCallback* callback, DCArgs* args, DCValue* result, void* userdata) { FunctionCallInfo* info = (FunctionCallInfo*)userdata; CallTempStruct* call; JNIEnv* env; LastError lastError = { 0, 0 }; jboolean setsLastError = info->fInfo.fSetsLastError; initCallHandler(args, &call, NULL, &info->fInfo); env = call->env; call->pCallIOs = info->fInfo.fCallIOs; BEGIN_TRY(env, call); if (setsLastError) { clearLastError(info->fInfo.fEnv); } JavaToFunctionCallHandler_Sub(call, info, args, result, setsLastError); if (setsLastError) { lastError = call->lastError; //memcpy(&lastError, &call->lastError, sizeof(LastError)); } END_TRY(info->fInfo.fEnv, call); cleanupCallHandler(call); if (setsLastError) { setLastError(env, lastError, info->fInfo.fThrowsLastError); } return info->fInfo.fDCReturnType; }
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, &info->fInfo); call->pCallIOs = info->fInfo.fCallIOs; BEGIN_TRY(env, call); CToJavaCallHandler_Sub(call, info, args, result); END_TRY(info->fInfo.fEnv, call); exc = (*env)->ExceptionOccurred(env); if (exc) { (*env)->ExceptionDescribe(env); printStackTrace(env, exc); //(*env)->ExceptionClear(env); } cleanupCallHandler(call); return info->fInfo.fDCReturnType; }
char __cdecl JavaToFunctionCallHandler(DCCallback* callback, DCArgs* args, DCValue* result, void* userdata) { FunctionCallInfo* info = (FunctionCallInfo*)userdata; CallTempStruct* call; JNIEnv* env; initCallHandler(args, &call, NULL); env = call->env; BEGIN_TRY(env, call); call->pCallIOs = info->fInfo.fCallIOs; if (info->fCheckLastError) clearLastError(info->fInfo.fEnv); dcMode(call->vm, info->fInfo.fDCMode); followArgs(call, args, info->fInfo.nParams, info->fInfo.fParamTypes, JNI_FALSE, JNI_FALSE) && followCall(call, info->fInfo.fReturnType, result, info->fForwardedSymbol, JNI_FALSE, JNI_FALSE); cleanupCallHandler(call); END_TRY_BASE(info->fInfo.fEnv, call, cleanupCallHandler(call););
void callSinglePointerArgVoidFunction(JNIEnv* env, void* constructor, void* thisPtr, int callMode) { CallTempStruct* call; initCallHandler(NULL, &call, env, NULL); dcMode(call->vm, callMode); //dcReset(call->vm); dcArgPointer(call->vm, thisPtr); dcCallVoid(call->vm, constructor); cleanupCallHandler(call); }
char __cdecl JavaToCPPMethodCallHandler(DCCallback* callback, DCArgs* args, DCValue* result, void* userdata) { FunctionCallInfo* info = (FunctionCallInfo*)userdata; CallTempStruct* call; jobject instance = initCallHandler(args, &call, NULL, &info->fInfo); call->pCallIOs = info->fInfo.fCallIOs; BEGIN_TRY(call->env, call); JavaToCPPMethodCallHandler_Sub(call, info, instance, args, result); END_TRY(info->fInfo.fEnv, call); cleanupCallHandler(call); return info->fInfo.fDCReturnType; }
char __cdecl JavaToCCallHandler(DCCallback* callback, DCArgs* args, DCValue* result, void* userdata) { CallTempStruct* call; JavaToNativeCallbackCallInfo* info = (JavaToNativeCallbackCallInfo*)userdata; jobject instance = initCallHandler(args, &call, NULL, &info->fInfo); // printf("JavaToCCallHandler !!!\n"); call->pCallIOs = info->fInfo.fCallIOs; BEGIN_TRY(env, call); JavaToCCallHandler_Sub(call, info, instance, args, result); END_TRY(info->fInfo.fEnv, call); cleanupCallHandler(call); return info->fInfo.fDCReturnType; }