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:
parent
d1a0a08af0
commit
b984ee70bb
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user