@@ -0,0 +1,48 @@
|
||||
#include "com_baeldung_jni_ExampleObjectsJNI.h"
|
||||
#include <iostream>
|
||||
|
||||
/*
|
||||
* Class: com_baeldung_jni_ExampleObjectsJNI
|
||||
* Method: createUser
|
||||
* Signature: (Ljava/lang/String;D)Lcom/baeldung/jni/UserData;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_com_baeldung_jni_ExampleObjectsJNI_createUser
|
||||
(JNIEnv *env, jobject thisObject, jstring name, jdouble balance){
|
||||
|
||||
// Create the object of the class UserData
|
||||
jclass userDataClass = env->FindClass("com/baeldung/jni/UserData");
|
||||
jobject newUserData = env->AllocObject(userDataClass);
|
||||
|
||||
// Get UserData fields to set
|
||||
jfieldID nameField = env->GetFieldID(userDataClass , "name", "Ljava/lang/String;");
|
||||
jfieldID balanceField = env->GetFieldID(userDataClass , "balance", "D");
|
||||
|
||||
// Set the values of the new object
|
||||
env->SetObjectField(newUserData, nameField, name);
|
||||
env->SetDoubleField(newUserData, balanceField, balance);
|
||||
|
||||
// Return the created object
|
||||
return newUserData;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: com_baeldung_jni_ExampleObjectsJNI
|
||||
* Method: printUserData
|
||||
* Signature: (Lcom/baeldung/jni/UserData;)Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_baeldung_jni_ExampleObjectsJNI_printUserData
|
||||
(JNIEnv *env, jobject thisObject, jobject userData){
|
||||
|
||||
// Find the class method id
|
||||
jclass userDataClass = env->GetObjectClass(userData);
|
||||
jmethodID methodId = env->GetMethodID(userDataClass, "getUserInfo", "()Ljava/lang/String;");
|
||||
|
||||
// Call the object method and get the result
|
||||
jstring result = (jstring)env->CallObjectMethod(userData, methodId);
|
||||
|
||||
// Print the result
|
||||
std::cout << "C++: User data is: " << env->GetStringUTFChars(result, NULL) << std::endl;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_baeldung_jni_ExampleObjectsJNI */
|
||||
|
||||
#ifndef _Included_com_baeldung_jni_ExampleObjectsJNI
|
||||
#define _Included_com_baeldung_jni_ExampleObjectsJNI
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_baeldung_jni_ExampleObjectsJNI
|
||||
* Method: createUser
|
||||
* Signature: (Ljava/lang/String;D)Lcom/baeldung/jni/UserData;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_com_baeldung_jni_ExampleObjectsJNI_createUser
|
||||
(JNIEnv *, jobject, jstring, jdouble);
|
||||
|
||||
/*
|
||||
* Class: com_baeldung_jni_ExampleObjectsJNI
|
||||
* Method: printUserData
|
||||
* Signature: (Lcom/baeldung/jni/UserData;)V
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_baeldung_jni_ExampleObjectsJNI_printUserData
|
||||
(JNIEnv *, jobject, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,34 @@
|
||||
#include "com_baeldung_jni_ExampleParametersJNI.h"
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
/*
|
||||
* Class: com_baeldung_jni_ExampleParametersJNI
|
||||
* Method: sumIntegers
|
||||
* Signature: (II)J
|
||||
*/
|
||||
JNIEXPORT jlong JNICALL Java_com_baeldung_jni_ExampleParametersJNI_sumIntegers (JNIEnv* env, jobject thisObject, jint first, jint second){
|
||||
std::cout << "C++: The numbers received are : " << first << " and " << second << std::endl;
|
||||
return (long)first + (long)second;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Class: com_baeldung_jni_ExampleParametersJNI
|
||||
* Method: sayHelloToMe
|
||||
* Signature: (Ljava/lang/String;Z)Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_baeldung_jni_ExampleParametersJNI_sayHelloToMe (JNIEnv* env, jobject thisObject, jstring name, jboolean isFemale){
|
||||
const char* nameCharPointer = env->GetStringUTFChars(name, NULL);
|
||||
std::cout << "C++: The string received is: " << nameCharPointer << std::endl;
|
||||
std::string title;
|
||||
if(isFemale){
|
||||
title = "Ms. ";
|
||||
}
|
||||
else{
|
||||
title = "Mr. ";
|
||||
}
|
||||
|
||||
std::string fullName = title + nameCharPointer;
|
||||
return env->NewStringUTF(fullName.c_str());
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_baeldung_jni_ExampleParametersJNI */
|
||||
|
||||
#ifndef _Included_com_baeldung_jni_ExampleParametersJNI
|
||||
#define _Included_com_baeldung_jni_ExampleParametersJNI
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_baeldung_jni_ExampleParametersJNI
|
||||
* Method: sumIntegers
|
||||
* Signature: (II)J
|
||||
*/
|
||||
JNIEXPORT jlong JNICALL Java_com_baeldung_jni_ExampleParametersJNI_sumIntegers
|
||||
(JNIEnv*, jobject, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: com_baeldung_jni_ExampleParametersJNI
|
||||
* Method: sayHelloToMe
|
||||
* Signature: (Ljava/lang/String;Z)Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_baeldung_jni_ExampleParametersJNI_sayHelloToMe
|
||||
(JNIEnv*, jobject, jstring, jboolean);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
13
java-native/src/main/cpp/com_baeldung_jni_HelloWorldJNI.cpp
Normal file
13
java-native/src/main/cpp/com_baeldung_jni_HelloWorldJNI.cpp
Normal file
@@ -0,0 +1,13 @@
|
||||
#include "com_baeldung_jni_HelloWorldJNI.h"
|
||||
#include <iostream>
|
||||
|
||||
/*
|
||||
* Class: com_baeldung_jni_HelloWorldJNI
|
||||
* Method: sayHello
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_baeldung_jni_HelloWorldJNI_sayHello (JNIEnv* env, jobject thisObject) {
|
||||
std::string hello = "Hello from C++ !!";
|
||||
std::cout << hello << std::endl;
|
||||
return env->NewStringUTF(hello.c_str());
|
||||
}
|
||||
21
java-native/src/main/cpp/com_baeldung_jni_HelloWorldJNI.h
Normal file
21
java-native/src/main/cpp/com_baeldung_jni_HelloWorldJNI.h
Normal file
@@ -0,0 +1,21 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_baeldung_jni_HelloWorldJNI */
|
||||
|
||||
#ifndef _Included_com_baeldung_jni_HelloWorldJNI
|
||||
#define _Included_com_baeldung_jni_HelloWorldJNI
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_baeldung_jni_HelloWorldJNI
|
||||
* Method: sayHello
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_baeldung_jni_HelloWorldJNI_sayHello
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
6
java-native/src/main/cpp/generateNativeLib.bat
Normal file
6
java-native/src/main/cpp/generateNativeLib.bat
Normal file
@@ -0,0 +1,6 @@
|
||||
REM Create the header with javac -h . ClassName.java
|
||||
REM Remember to set your JAVA_HOME env var
|
||||
g++ -c -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 com_baeldung_jni_HelloWorldJNI.cpp -o com_baeldung_jni_HelloWorldJNI.o
|
||||
g++ -c -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 com_baeldung_jni_ExampleParametersJNI.cpp -o com_baeldung_jni_ExampleParametersJNI.o
|
||||
g++ -c -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 com_baeldung_jni_ExampleObjectsJNI.cpp -o com_baeldung_jni_ExampleObjectsJNI.o
|
||||
g++ -shared -o ..\..\..\native\win32\native.dll com_baeldung_jni_HelloWorldJNI.o com_baeldung_jni_ExampleParametersJNI.o com_baeldung_jni_ExampleObjectsJNI.o -Wl,--add-stdcall-alias
|
||||
7
java-native/src/main/cpp/generateNativeLib.sh
Normal file
7
java-native/src/main/cpp/generateNativeLib.sh
Normal file
@@ -0,0 +1,7 @@
|
||||
# Create the header with javac -h . ClassName.java
|
||||
# Remember to set your JAVA_HOME env var
|
||||
g++ -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux com_baeldung_jni_HelloWorldJNI.cpp -o com_baeldung_jni_HelloWorldJNI.o
|
||||
g++ -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux com_baeldung_jni_ExampleParametersJNI.cpp -o com_baeldung_jni_ExampleParametersJNI.o
|
||||
g++ -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux com_baeldung_jni_ExampleObjectsJNI.cpp -o com_baeldung_jni_ExampleObjectsJNI.o
|
||||
g++ -shared -fPIC -o ../../../native/linux_x86_64/libnative.so com_baeldung_jni_HelloWorldJNI.o com_baeldung_jni_ExampleParametersJNI.o com_baeldung_jni_ExampleObjectsJNI.o -lc
|
||||
# Don't forget to set java.library.path to point to the folder where you have the libnative you're loading.
|
||||
6
java-native/src/main/cpp/generateNativeLibMac.sh
Normal file
6
java-native/src/main/cpp/generateNativeLibMac.sh
Normal file
@@ -0,0 +1,6 @@
|
||||
# Create the header with javac -h . ClassName.java
|
||||
# Remember to set your JAVA_HOME env var
|
||||
g++ -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/darwin com_baeldung_jni_HelloWorldJNI.cpp -o com_baeldung_jni_HelloWorldJNI.o
|
||||
g++ -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/darwin com_baeldung_jni_ExampleParametersJNI.cpp -o com_baeldung_jni_ExampleParametersJNI.o
|
||||
g++ -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/darwin com_baeldung_jni_ExampleObjectsJNI.cpp -o com_baeldung_jni_ExampleObjectsJNI.o
|
||||
g++ -dynamiclib -o ../../../native/macos/libnative.dylib com_baeldung_jni_HelloWorldJNI.o com_baeldung_jni_ExampleParametersJNI.o com_baeldung_jni_ExampleObjectsJNI.o -lc
|
||||
Reference in New Issue
Block a user