1
0
mirror of https://github.com/MinimaJack/JVM-plugin.git synced 2025-02-22 16:25:35 +02:00

Add support type date in return values

Add nullable check for string and binary data
This commit is contained in:
Evgeniy 2019-12-11 14:04:40 +03:00
parent d1a0a08af0
commit b984ee70bb

View File

@ -24,7 +24,7 @@ static wchar_t *g_PropNames[] = { L"IsEnabled", L"javaHome", L"libraryDir" };
static wchar_t *g_MethodNames[] = { L"LaunchInJVM",L"LaunchInJVMP",L"LaunchInJVMPP", L"CallFInJVMB", L"CallFInJVMBP", L"CallFInJVMBPP", L"CallFInJVM", L"CallFInJVMP", L"CallFInJVMPP", L"CallFInJVMPPP", L"CallFInJVMPPPP", L"Disable", L"AddJar" };
static void JNICALL Java_Runner_log(JNIEnv *env, jobject thisObj, jstring info) {
if (gAsyncEvent ==nullptr) {
if (gAsyncEvent == nullptr) {
return;
}
@ -713,6 +713,7 @@ bool JVMLauncher::CallAsFunc(const long lMethodNum,
case VTYPE_R8: signature.append("D"); break;
case VTYPE_EMPTY: signature.append("V"); break;
case VTYPE_DATE: signature.append("Ljava/util/Date;"); break;
case VTYPE_TM: signature.append("Ljava/util/Date;"); break;
}
methodID = JNI_getStaticMethodID(findedClass, "mainInt", signature.c_str(), resultOk);
if (!resultOk) {
@ -739,6 +740,7 @@ bool JVMLauncher::CallAsFunc(const long lMethodNum,
case VTYPE_PWSTR:
case VTYPE_PSTR:
case VTYPE_DATE:
case VTYPE_TM:
result.l = JNI_callStaticObjectMethodA(findedClass, methodID, values, resultOk);
break;
case VTYPE_I4:
@ -776,6 +778,8 @@ bool JVMLauncher::CallAsFunc(const long lMethodNum,
case VTYPE_PWSTR:
case VTYPE_PSTR:
{
if (!m_JVMEnv->IsSameObject(result.l, NULL)) {
TV_VT(pvarRetValue) = VTYPE_PWSTR;
auto wstring = JStringToWString(m_JVMEnv, static_cast<jstring>(result.l));
auto length = wstring.length();
if (length && m_iMemory->AllocMemory((void**)&pvarRetValue->pwstrVal, length * sizeof(WCHAR_T)))
@ -784,7 +788,10 @@ bool JVMLauncher::CallAsFunc(const long lMethodNum,
pvarRetValue->strLen = length;
}
m_JVMEnv->DeleteLocalRef(result.l);
TV_VT(pvarRetValue) = VTYPE_PWSTR;
}
else {
TV_VT(pvarRetValue) = VTYPE_NULL;
}
}
break;
case VTYPE_I4:
@ -798,6 +805,7 @@ bool JVMLauncher::CallAsFunc(const long lMethodNum,
break;
case VTYPE_BLOB:
{
if (!m_JVMEnv->IsSameObject(result.l, NULL)) {
jbyteArray arr = static_cast<jbyteArray>(result.l);
auto length = m_JVMEnv->GetArrayLength(arr);
void *elements = m_JVMEnv->GetPrimitiveArrayCritical(arr, NULL);
@ -809,7 +817,30 @@ bool JVMLauncher::CallAsFunc(const long lMethodNum,
m_JVMEnv->ReleasePrimitiveArrayCritical(arr, elements, 0);
m_JVMEnv->DeleteLocalRef(result.l);
}
else {
TV_VT(pvarRetValue) = VTYPE_NULL;
}
}
break;
case VTYPE_DATE:
case VTYPE_TM: {
if (m_JVMEnv->IsSameObject(result.l, NULL)) {
TV_VT(pvarRetValue) = VTYPE_NULL;
}
else {
TV_VT(pvarRetValue) = VTYPE_TM;
jclass date = m_JVMEnv->FindClass("java/util/Date");
jmethodID getTime = m_JVMEnv->GetMethodID(date, "getTime", "()J");
time_t rawtime = m_JVMEnv->CallLongMethod(result.l, getTime) / 1000;
tm* ref = gmtime(&rawtime);
(pvarRetValue)->tmVal = *ref;
m_JVMEnv->DeleteLocalRef(result.l);
}
}
break;
}
detach: