Click here to Skip to main content
15,796,456 members
Home / Discussions / Java
   

Java

 
PinnedForum Guidelines - PLEASE READ Pin
Chris Maunder28-Jul-09 3:36
cofounderChris Maunder28-Jul-09 3:36 
QuestionJava strings Pin
mike74114-Dec-23 17:12
mike74114-Dec-23 17:12 
AnswerRe: Java strings Pin
Richard MacCutchan4-Dec-23 23:17
mveRichard MacCutchan4-Dec-23 23:17 
GeneralRe: Java strings Pin
Andre Oosthuizen5-Dec-23 9:47
mveAndre Oosthuizen5-Dec-23 9:47 
GeneralRe: Java strings Pin
Richard MacCutchan5-Dec-23 10:26
mveRichard MacCutchan5-Dec-23 10:26 
AnswerRe: Java strings Pin
jschell5-Dec-23 6:26
jschell5-Dec-23 6:26 
GeneralRe: Java strings Pin
trønderen5-Dec-23 12:29
trønderen5-Dec-23 12:29 
GeneralRe: Java strings Pin
jschell15hrs 43mins ago
jschell15hrs 43mins ago 
GeneralRe: Java strings Pin
trønderen12hrs 23mins ago
trønderen12hrs 23mins ago 
AnswerRe: Java strings Pin
Gerry Schmitz14hrs 26mins ago
mveGerry Schmitz14hrs 26mins ago 
Question<pre>Problems enlarging Eclipse icons Pin
BrunoV202219-Nov-23 11:57
BrunoV202219-Nov-23 11:57 
AnswerRe: <pre>Problems enlarging Eclipse icons Pin
jschell5-Dec-23 6:27
jschell5-Dec-23 6:27 
QuestionHow to convert string to double with trailing zeros after decimal Pin
Member 161354338-Nov-23 2:46
Member 161354338-Nov-23 2:46 
AnswerRe: How to convert string to double with trailing zeros after decimal Pin
Richard MacCutchan8-Nov-23 3:07
mveRichard MacCutchan8-Nov-23 3:07 
GeneralRe: How to convert string to double with trailing zeros after decimal Pin
Member 161354338-Nov-23 3:23
Member 161354338-Nov-23 3:23 
GeneralRe: How to convert string to double with trailing zeros after decimal Pin
Richard MacCutchan8-Nov-23 3:35
mveRichard MacCutchan8-Nov-23 3:35 
GeneralRe: How to convert string to double with trailing zeros after decimal Pin
Dave Kreskowiak8-Nov-23 4:20
mveDave Kreskowiak8-Nov-23 4:20 
GeneralRe: How to convert string to double with trailing zeros after decimal Pin
jschell8-Nov-23 7:12
jschell8-Nov-23 7:12 
AnswerRe: How to convert string to double with trailing zeros after decimal Pin
Ralf Meier8-Nov-23 9:02
professionalRalf Meier8-Nov-23 9:02 
AnswerRe: How to convert string to double with trailing zeros after decimal Pin
Dave Kreskowiak8-Nov-23 3:23
mveDave Kreskowiak8-Nov-23 3:23 
QuestionHow to use JNI without setting Environment Variables Pin
Valentinor16-Oct-23 1:54
Valentinor16-Oct-23 1:54 
AnswerRe: How to use JNI without setting Environment Variables Pin
Valentinor16-Oct-23 2:42
Valentinor16-Oct-23 2:42 
I managed to make it work:
C++
#include <string>
#include <iostream>
#include <chrono>
#include <thread>
#include <jni.h>
#include <Windows.h>

JavaVM* jvm = nullptr;

std::string createVM(std::string location) {
	std::string jvmLocation = location;
	jvmLocation.append("ThirdParty\\Eclipse Adoptium\\jre-17.0.7.7-hotspot\\bin\\servers\\jvm.dll");
	HMODULE hJVMDLL = LoadLibraryA(jvmLocation.c_str());
	typedef jint(JNICALL* fpCJV)(JavaVM**, void**, void*);
	if (hJVMDLL != NULL) {
		fpCJV JNI_CreateJavaVM = (fpCJV)::GetProcAddress(hJVMDLL, "JNI_CreateJavaVM");
		location.insert(0, "-Djava.class.path=");
		location.append("Data\\Java");
		JavaVMInitArgs vm_args;
		JavaVMOption* options = new JavaVMOption[1];
		options[0].optionString = &location[0];
		vm_args.version = JNI_VERSION_10;
		vm_args.nOptions = 1;
		vm_args.options = options;
		vm_args.ignoreUnrecognized = false;
		JNIEnv* env = nullptr;
		jint rc = JNI_OK;
		if (jvm == nullptr) {
			rc = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
		}
		else {
			rc = jvm->AttachCurrentThread((void**)&env, NULL);
		}
		delete[] options;
		if (rc != JNI_OK) {
			if (rc == JNI_EVERSION)
				return "JNI_EVERSION";
			else if (rc == JNI_ENOMEM)
				return "JNI_ENOMEM";
			else if (rc == JNI_EINVAL)
				return "JNI_EINVAL";
			else if (rc == JNI_EEXIST)
				return "JNI_EEXIST";
			else
				return "JNI_FATALERROR";
		}
		return "JNI_CREATED";
	}
	else {
		return "ERROR_LOADING_DLL";
	}
}

std::string createIdentification() {
	JNIEnv* env;
	jvm->AttachCurrentThread((void**)&env, NULL);
	jclass jClass = env->FindClass("JavaMethods");

	if (jClass == nullptr) {
		return "ClassNotFound cI";
	}
	else {
		jmethodID methodID = env->GetStaticMethodID(jClass, "createIdentification", "()Ljava/lang/String;");
		if (methodID == nullptr) {
			return "MethodNotFound cI";
		}
		else {
			jboolean isCopy;
			jstring jResult = (jstring)env->CallStaticObjectMethod(jClass, methodID);
			const char* string = env->GetStringUTFChars(jResult, &isCopy);
			std::string result = string;
			env->ReleaseStringUTFChars(jResult, string);

			return result;
		}
	}
}

int main() {
	std::cout << createVM("Location_To_App_Folder").c_str() << std::endl;
	if (jvm != NULL) {
		std::cout << createIdentification().c_str();
	}

	std::this_thread::sleep_for(std::chrono::milliseconds(2000));
	return 0;
}


Thank you @Richard-MacCutchan for the original code!
AnswerRe: How to use JNI without setting Environment Variables Pin
jschell16-Oct-23 5:58
jschell16-Oct-23 5:58 
GeneralRe: How to use JNI without setting Environment Variables Pin
Valentinor16-Oct-23 6:41
Valentinor16-Oct-23 6:41 
GeneralRe: How to use JNI without setting Environment Variables Pin
jschell17-Oct-23 6:47
jschell17-Oct-23 6:47 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.