Заставка

Программирование на старых и современных языках, а так-же дизайн

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование на старых и современных языках, а так-же дизайн » Java, OpenJDK » JNI, нативная библиотека OpenJDK11 + Dev-C++ 5.11


JNI, нативная библиотека OpenJDK11 + Dev-C++ 5.11

Сообщений 1 страница 2 из 2

1

1. Напишим код:

Код:
public class DemoJNI {
   static {
      System.loadLibrary("demojni");
   }
   private native void PrintText(String text);
   public static void main(String[] args) {
      new DemoJNI().PrintText("Hello JNI!"); 
   }
}

2. Теперь введём команду javac -h . DemoJNI.java, если всё откомпилроволось, вы увидите DemoJNI.h

Код:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class DemoJNI */

#ifndef _Included_DemoJNI
#define _Included_DemoJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     DemoJNI
 * Method:    PrintText
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_DemoJNI_PrintText
  (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif

3. Создадим DemoJNI.C:

Код:
#include <jni.h>
#include <stdio.h>
#include "DemoJNI.h"

JNIEXPORT void JNICALL Java_DemoJNI_PrintText
  (JNIEnv *env, jobject obj, jstring text) {
   printf("%s", text);
}

4. Создадим проект DLL
https://i.ibb.co/2NZ01pr/JNI-Project-Dev-CPP-15-44-10-06-2021-min.jpg

5. Добавим в проект DemoJNI.c и DemoJNI.h
https://i.ibb.co/3sxw2vk/DEV-CPP-15-46-10-06-2021-min.jpg

6. Добавим пути к OpenJDK
https://i.ibb.co/sK5qH9S/DEV-CPP-DIRECTORIES-15-48-10-06-2021-min.jpg

7. Откомпилируем

Оно как-бы откомпилиоровалось и работает, но не правильно, проблема в том, что у меня проект не utf-8, а jstring это utf-8.

0

2

Всё заработало, поменяем строчку:

Код:
printf("%s", text);

На:

Код:
printf("%s", (*env)->GetStringUTFChars(env, text, NULL));

Результат:

Код:
C:\JNITest2>java DemoJNI
Hello JNI!
C:\JNITest2>

https://i.ibb.co/5Kxj2gn/result-jni-16-29-10-06-2021-min.jpg

0


Вы здесь » Программирование на старых и современных языках, а так-же дизайн » Java, OpenJDK » JNI, нативная библиотека OpenJDK11 + Dev-C++ 5.11