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

Cleanup boilerplate code

This commit is contained in:
Evgeniy 2019-12-02 09:07:38 +03:00
parent 18d78d42f4
commit e4c4e68c83
4 changed files with 40 additions and 43 deletions

View File

@ -28,7 +28,7 @@ static wchar_t *g_MethodNamesRu[] = { L"LaunchInJVM",L"LaunchInJVMP",L"LaunchInJ
static void JNICALL Java_Runner_log(JNIEnv *env, jobject thisObj, jstring info) { static void JNICALL Java_Runner_log(JNIEnv *env, jobject thisObj, jstring info) {
wchar_t *who = L"ComponentNative", *what = L"Java"; wchar_t *who = JVM_LAUNCHER, *what = L"Java";
auto wstring = JStringToWString(env, info); auto wstring = JStringToWString(env, info);
WCHAR_T *err = 0; WCHAR_T *err = 0;
@ -59,7 +59,7 @@ bool JVMLauncher::endCall(JNIEnv* env)
WCHAR_T *err = 0; WCHAR_T *err = 0;
::convToShortWchar(&err, wstring.c_str()); ::convToShortWchar(&err, wstring.c_str());
pAsyncEvent->AddError(ADDIN_E_FAIL, L"JVMLauncher", err, 10); pAsyncEvent->AddError(ADDIN_E_FAIL, JVM_LAUNCHER, err, 10);
delete[]err; delete[]err;
m_JVMEnv->ExceptionClear(); m_JVMEnv->ExceptionClear();
@ -162,7 +162,7 @@ jmethodID JVMLauncher::JNI_getStaticMethodID(jclass clazz, const char* name, con
void JVMLauncher::addJar(const char* jarname) void JVMLauncher::addJar(const char* jarname)
{ {
if (m_boolEnabled) { if (m_boolEnabled) {
pAsyncEvent->AddError(ADDIN_E_FAIL, L"JVMLauncher", L"JVM already launched", 6); pAsyncEvent->AddError(ADDIN_E_FAIL, JVM_LAUNCHER, L"JVM already launched", 6);
return; return;
} }
m_listOfJars.push_back(jarname); m_listOfJars.push_back(jarname);
@ -189,20 +189,20 @@ JVMLauncher::JVMLauncher() {
void JVMLauncher::LaunchJVM() { void JVMLauncher::LaunchJVM() {
if (m_hDllInstance == nullptr) { if (m_hDllInstance == nullptr) {
if (m_JavaHome.empty()) { if (m_JavaHome.empty()) {
pAsyncEvent->AddError(ADDIN_E_FAIL, L"JVMLauncher", L"Set JAVA_HOME environment", 1); pAsyncEvent->AddError(ADDIN_E_FAIL, JVM_LAUNCHER, L"Set JAVA_HOME environment", 1);
return; return;
} }
m_JvmDllLocation = m_JavaHome + "/jre/bin/server/jvm.dll"; m_JvmDllLocation = m_JavaHome + "/jre/bin/server/jvm.dll";
m_hDllInstance = LoadLibraryA(m_JvmDllLocation.c_str()); m_hDllInstance = LoadLibraryA(m_JvmDllLocation.c_str());
} }
if (m_hDllInstance == nullptr) { if (m_hDllInstance == nullptr) {
pAsyncEvent->AddError(ADDIN_E_FAIL, L"JVMLauncher", L"Cannot find JDK", 1); pAsyncEvent->AddError(ADDIN_E_FAIL, JVM_LAUNCHER, L"Cannot find JDK", 1);
return; return;
} }
else { else {
if (m_GetCreatedJavaVMs == nullptr) { if (m_GetCreatedJavaVMs == nullptr) {
m_GetCreatedJavaVMs = (GetCreatedJavaVMs)GetProcAddress(m_hDllInstance, "JNI_GetCreatedJavaVMs"); m_GetCreatedJavaVMs = reinterpret_cast<GetCreatedJavaVMs>(GetProcAddress(m_hDllInstance, "JNI_GetCreatedJavaVMs"));
} }
int n; int n;
@ -214,7 +214,7 @@ void JVMLauncher::LaunchJVM() {
if (n == 0) if (n == 0)
{ {
if (m_JVMInstance == nullptr) { if (m_JVMInstance == nullptr) {
m_JVMInstance = (CreateJavaVM)GetProcAddress(m_hDllInstance, "JNI_CreateJavaVM"); m_JVMInstance = reinterpret_cast<CreateJavaVM>(GetProcAddress(m_hDllInstance, "JNI_CreateJavaVM"));
} }
std::string strJavaClassPath; std::string strJavaClassPath;
std::string strJavaLibraryPath; std::string strJavaLibraryPath;
@ -244,12 +244,12 @@ void JVMLauncher::LaunchJVM() {
jint res = m_JVMInstance(&m_RunningJVMInstance, (void **)&m_JVMEnv, &vm_args); jint res = m_JVMInstance(&m_RunningJVMInstance, (void **)&m_JVMEnv, &vm_args);
if (res != JNI_OK) { if (res != JNI_OK) {
pAsyncEvent->AddError(ADDIN_E_FAIL, L"JVMLauncher", L"Could not launch the JVM", 3); pAsyncEvent->AddError(ADDIN_E_FAIL, JVM_LAUNCHER, L"Could not launch the JVM", 3);
} }
else { else {
m_boolEnabled = true; m_boolEnabled = true;
if (!verify()) { if (!verify()) {
pAsyncEvent->AddError(ADDIN_E_FAIL, L"JVMLauncher", L"Cannot verify jar", 8); pAsyncEvent->AddError(ADDIN_E_FAIL, JVM_LAUNCHER, L"Cannot verify jar", 8);
this->JNI_destroyVM(); this->JNI_destroyVM();
} }
} }
@ -274,11 +274,11 @@ bool JVMLauncher::validateCall() {
LaunchJVM(); LaunchJVM();
if (!m_boolEnabled) { if (!m_boolEnabled) {
pAsyncEvent->AddError(ADDIN_E_FAIL, L"JVMLauncher", L"JVM not running", 5); pAsyncEvent->AddError(ADDIN_E_FAIL, JVM_LAUNCHER, L"JVM not running", 5);
return false; return false;
} }
if (!valid) { if (!valid) {
pAsyncEvent->AddError(ADDIN_E_FAIL, L"JVMLauncher", L"Load not valid packages", 5); pAsyncEvent->AddError(ADDIN_E_FAIL, JVM_LAUNCHER, L"Load not valid packages", 5);
return false; return false;
} }
return true; return true;
@ -296,7 +296,7 @@ jclass JVMLauncher::findClassForCall(std::string className) {
JNINativeMethod methods[]{ { "log", "(Ljava/lang/String;)V", (void *)&Java_Runner_log } }; // mapping table JNINativeMethod methods[]{ { "log", "(Ljava/lang/String;)V", (void *)&Java_Runner_log } }; // mapping table
if (m_JVMEnv->RegisterNatives(findedClass, methods, 1) < 0) { if (m_JVMEnv->RegisterNatives(findedClass, methods, 1) < 0) {
if (m_JVMEnv->ExceptionOccurred()) // verify if it's ok if (m_JVMEnv->ExceptionOccurred()) // verify if it's ok
pAsyncEvent->AddError(ADDIN_E_FAIL, L"JVMLauncher", L" OOOOOPS: exception when registreing natives handlers", 6); pAsyncEvent->AddError(ADDIN_E_FAIL, JVM_LAUNCHER, L" OOOOOPS: exception when registreing natives handlers", 6);
} }
} }
else { else {
@ -335,7 +335,7 @@ jmethodID JVMLauncher::HasMethodInCache(jclass findedclass) {
//---------------------------------------------------------------------------// //---------------------------------------------------------------------------//
bool JVMLauncher::RegisterExtensionAs(WCHAR_T** wsExtensionName) bool JVMLauncher::RegisterExtensionAs(WCHAR_T** wsExtensionName)
{ {
wchar_t *wsExtension = L"JVMLauncher"; wchar_t *wsExtension = JVM_LAUNCHER;
size_t iActualSize = ::wcslen(wsExtension) + 1; size_t iActualSize = ::wcslen(wsExtension) + 1;
if (m_iMemory && m_iMemory->AllocMemory((void**)wsExtensionName, iActualSize * sizeof(wchar_t))) { if (m_iMemory && m_iMemory->AllocMemory((void**)wsExtensionName, iActualSize * sizeof(wchar_t))) {
@ -451,14 +451,14 @@ bool JVMLauncher::SetPropVal(const long lPropNum, tVariant *varPropVal)
break; break;
case ePropJavaHome: case ePropJavaHome:
if (m_boolEnabled) { if (m_boolEnabled) {
pAsyncEvent->AddError(ADDIN_E_FAIL, L"JVMLauncher", L"JVM already running", 7); pAsyncEvent->AddError(ADDIN_E_FAIL, JVM_LAUNCHER, L"JVM already running", 7);
return false; return false;
} }
m_JavaHome = getStdStringFrom1C(varPropVal); m_JavaHome = getStdStringFrom1C(varPropVal);
break; break;
case ePropLibraryDir: case ePropLibraryDir:
if (m_boolEnabled) { if (m_boolEnabled) {
pAsyncEvent->AddError(ADDIN_E_FAIL, L"JVMLauncher", L"JVM already running", 7); pAsyncEvent->AddError(ADDIN_E_FAIL, JVM_LAUNCHER, L"JVM already running", 7);
return false; return false;
} }
m_ProductLibDir = getStdStringFrom1C(varPropVal); m_ProductLibDir = getStdStringFrom1C(varPropVal);
@ -637,7 +637,7 @@ bool JVMLauncher::CallAsFunc(const long lMethodNum,
std::string className = getStdStringFrom1C(paParams); std::string className = getStdStringFrom1C(paParams);
if (className.empty()) { if (className.empty()) {
pAsyncEvent->AddError(ADDIN_E_FAIL, L"JVMLauncher", L"Send empty class name", 10); pAsyncEvent->AddError(ADDIN_E_FAIL, JVM_LAUNCHER, L"Send empty class name", 10);
return false; return false;
} }
if (!validateCall()) { if (!validateCall()) {
@ -673,14 +673,14 @@ bool JVMLauncher::CallAsFunc(const long lMethodNum,
res = m_RunningJVMInstance->AttachCurrentThread((void**)&m_JVMEnv, NULL); res = m_RunningJVMInstance->AttachCurrentThread((void**)&m_JVMEnv, NULL);
if (res != JNI_OK) { if (res != JNI_OK) {
pAsyncEvent->AddError(ADDIN_E_FAIL, L"JVMLauncher", L"Could not attach to the JVM", 4); pAsyncEvent->AddError(ADDIN_E_FAIL, JVM_LAUNCHER, L"Could not attach to the JVM", 4);
return false; return false;
} }
jclass findedClass = findClassForCall(className); jclass findedClass = findClassForCall(className);
if (findedClass == nullptr) { if (findedClass == nullptr) {
pAsyncEvent->AddError(ADDIN_E_FAIL, L"JVMLauncher", L"Cannot find class", 10); pAsyncEvent->AddError(ADDIN_E_FAIL, JVM_LAUNCHER, L"Cannot find class", 10);
resultOk = false; resultOk = false;
goto detach; goto detach;
} }
@ -710,37 +710,32 @@ bool JVMLauncher::CallAsFunc(const long lMethodNum,
} }
if (!resultOk) { if (!resultOk) {
pAsyncEvent->AddError(ADDIN_E_FAIL, L"JVMLauncher", L"Cannot find method", 10); pAsyncEvent->AddError(ADDIN_E_FAIL, JVM_LAUNCHER, L"Cannot find method", 10);
goto detach; goto detach;
} }
jvalue *values = getParams(this->m_JVMEnv, paParams, 1, lastIndexOfParam); jvalue *values = getParams(this->m_JVMEnv, paParams, 1, lastIndexOfParam);
jboolean resultBoolean = false; jvalue result;
jstring resultString = nullptr;
jint resultInt = 0;
jfloat resultFloat = 0.0f;
jdouble resultDouble = 0.0;
jobject resultByteArray = nullptr;
switch (rt) switch (rt)
{ {
case VTYPE_BOOL: case VTYPE_BOOL:
resultBoolean = JNI_callStaticBooleanMethodA(findedClass, methodID, values, resultOk); result.z = JNI_callStaticBooleanMethodA(findedClass, methodID, values, resultOk);
break; break;
case VTYPE_PWSTR: case VTYPE_PWSTR:
case VTYPE_PSTR: case VTYPE_PSTR:
resultString = (jstring)JNI_callStaticObjectMethodA(findedClass, methodID, values, resultOk); result.l = JNI_callStaticObjectMethodA(findedClass, methodID, values, resultOk);
break; break;
case VTYPE_I4: case VTYPE_I4:
resultInt = JNI_callStaticIntMethodA(findedClass, methodID, values, resultOk); result.i = JNI_callStaticIntMethodA(findedClass, methodID, values, resultOk);
break; break;
case VTYPE_R4: case VTYPE_R4:
resultFloat = JNI_callStaticFloatMethodA(findedClass, methodID, values, resultOk); result.f = JNI_callStaticFloatMethodA(findedClass, methodID, values, resultOk);
break; break;
case VTYPE_R8: case VTYPE_R8:
resultDouble = JNI_callStaticDoubleMethodA(findedClass, methodID, values, resultOk); result.d = JNI_callStaticDoubleMethodA(findedClass, methodID, values, resultOk);
break; break;
case VTYPE_BLOB: case VTYPE_BLOB:
resultByteArray = JNI_callStaticObjectMethodA(findedClass, methodID, values, resultOk); result.l = JNI_callStaticObjectMethodA(findedClass, methodID, values, resultOk);
break; break;
case VTYPE_EMPTY: case VTYPE_EMPTY:
this->JNI_callStaticVoidMethodA(findedClass, methodID, values, resultOk); this->JNI_callStaticVoidMethodA(findedClass, methodID, values, resultOk);
@ -760,34 +755,34 @@ bool JVMLauncher::CallAsFunc(const long lMethodNum,
switch (rt) switch (rt)
{ {
case VTYPE_BOOL: case VTYPE_BOOL:
TV_BOOL(pvarRetValue) = resultBoolean; TV_BOOL(pvarRetValue) = result.z;
break; break;
case VTYPE_PWSTR: case VTYPE_PWSTR:
case VTYPE_PSTR: case VTYPE_PSTR:
{ {
auto wstring = JStringToWString(m_JVMEnv, resultString); auto wstring = JStringToWString(m_JVMEnv, static_cast<jstring>(result.l));
auto length = wstring.length(); auto length = wstring.length();
if (length && m_iMemory->AllocMemory((void**)&pvarRetValue->pwstrVal, length * sizeof(WCHAR_T))) if (length && m_iMemory->AllocMemory((void**)&pvarRetValue->pwstrVal, length * sizeof(WCHAR_T)))
{ {
memcpy(pvarRetValue->pwstrVal, wstring.c_str(), length * sizeof(WCHAR_T)); memcpy(pvarRetValue->pwstrVal, wstring.c_str(), length * sizeof(WCHAR_T));
pvarRetValue->strLen = length; pvarRetValue->strLen = length;
} }
m_JVMEnv->DeleteLocalRef(resultString); m_JVMEnv->DeleteLocalRef(result.l);
TV_VT(pvarRetValue) = VTYPE_PWSTR; TV_VT(pvarRetValue) = VTYPE_PWSTR;
} }
break; break;
case VTYPE_I4: case VTYPE_I4:
TV_INT(pvarRetValue) = resultInt; TV_INT(pvarRetValue) = result.i;
break; break;
case VTYPE_R4: case VTYPE_R4:
TV_R4(pvarRetValue) = resultFloat; TV_R4(pvarRetValue) = result.f;
break; break;
case VTYPE_R8: case VTYPE_R8:
TV_R8(pvarRetValue) = resultDouble; TV_R8(pvarRetValue) = result.d;
break; break;
case VTYPE_BLOB: case VTYPE_BLOB:
{ {
jbyteArray arr = reinterpret_cast<jbyteArray>(resultByteArray); jbyteArray arr = static_cast<jbyteArray>(result.l);
auto length = m_JVMEnv->GetArrayLength(arr); auto length = m_JVMEnv->GetArrayLength(arr);
void *elements = m_JVMEnv->GetPrimitiveArrayCritical(arr, NULL); void *elements = m_JVMEnv->GetPrimitiveArrayCritical(arr, NULL);
if (length && m_iMemory->AllocMemory((void**)&pvarRetValue->pstrVal, length)) if (length && m_iMemory->AllocMemory((void**)&pvarRetValue->pstrVal, length))
@ -796,7 +791,7 @@ bool JVMLauncher::CallAsFunc(const long lMethodNum,
pvarRetValue->strLen = length; pvarRetValue->strLen = length;
} }
m_JVMEnv->ReleasePrimitiveArrayCritical(arr, elements, 0); m_JVMEnv->ReleasePrimitiveArrayCritical(arr, elements, 0);
m_JVMEnv->DeleteLocalRef(resultByteArray); m_JVMEnv->DeleteLocalRef(result.l);
} }
break; break;
} }

View File

@ -19,6 +19,8 @@
#define END_CALL \ #define END_CALL \
hasError = this->endCall(env); } hasError = this->endCall(env); }
#define JVM_LAUNCHER L"JVMLauncher"
typedef jint(JNICALL *CreateJavaVM)(JavaVM **pvm, void **penv, void *args); typedef jint(JNICALL *CreateJavaVM)(JavaVM **pvm, void **penv, void *args);
typedef jint(JNICALL * GetCreatedJavaVMs)(JavaVM**, jsize, jsize*); typedef jint(JNICALL * GetCreatedJavaVMs)(JavaVM**, jsize, jsize*);

View File

@ -154,7 +154,7 @@
<ClCompile> <ClCompile>
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>c:\Program Files\Java\jdk1.8.0_171\include\win32\;c:\Program Files\Java\jdk1.8.0_171\;D:\vanzhula\cpp\NativeAPI\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>c:\Program Files\Java\jdk1.8.0_171\include\win32\;c:\Program Files\Java\jdk1.8.0_171\;$(SolutionDir)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;ADDINCPP_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;ADDINCPP_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
@ -180,7 +180,7 @@
<ClCompile> <ClCompile>
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>c:\Program Files\Java\jdk1.8.0_171\include\win32\;c:\Program Files\Java\jdk1.8.0_171\;D:\vanzhula\cpp\NativeAPI\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>c:\Program Files\Java\jdk1.8.0_171\include\win32\;c:\Program Files\Java\jdk1.8.0_171\;$(SolutionDir)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;ADDINCPP_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;ADDINCPP_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>

View File

@ -24,7 +24,7 @@ jvalue* getParams(JNIEnv* env, tVariant* paParams, int start, int end) {
for (auto i = start; i < end; i++) for (auto i = start; i < end; i++)
{ {
if (TV_VT(&paParams[i]) == VTYPE_PSTR || TV_VT(&paParams[i]) == VTYPE_PWSTR) { if (TV_VT(&paParams[i]) == VTYPE_PSTR || TV_VT(&paParams[i]) == VTYPE_PWSTR) {
values[i - start].l = (jobject)getjstringFrom1C(env, &paParams[i]); values[i - start].l = getjstringFrom1C(env, &paParams[i]);
} }
else if (TV_VT(&paParams[i]) == VTYPE_I4) { else if (TV_VT(&paParams[i]) == VTYPE_I4) {
values[i - start].i = TV_INT(&paParams[i]); values[i - start].i = TV_INT(&paParams[i]);
@ -33,7 +33,7 @@ jvalue* getParams(JNIEnv* env, tVariant* paParams, int start, int end) {
values[i - start].z = TV_BOOL(&paParams[i]); values[i - start].z = TV_BOOL(&paParams[i]);
} }
else if (TV_VT(&paParams[i]) == VTYPE_R4) { else if (TV_VT(&paParams[i]) == VTYPE_R4) {
values[i - start].f = (jfloat)TV_R4(&paParams[i]); values[i - start].f = TV_R4(&paParams[i]);
} }
} }
return values; return values;