Форум программистов, компьютерный форум, киберфорум
Рыжий Лис
Войти
Регистрация
Восстановить пароль
Рейтинг: 5.00. Голосов: 1.

Вызов в java native метода из dll библиотеки

Запись от Рыжий Лис размещена 25.05.2013 в 11:45
Метки c++, dll, java

Столкнулся с такой проблемой недавно. С большим трудом и помощью данного форума нашёл рабочий пример.
Ну, начнём.
Создаём файл Test.java
Java
1
2
3
4
5
6
7
8
9
10
11
public class Test {
    //нативный метод, который мы реализуем дальше в dll библиотеке
    public static native void test(); 
        static{
            //загружаем файл Test.dll
            System.loadLibrary("Test"); 
        }
    public static void main(String[] args) {
        test();
    }
}
компилируем
Bash
1
javac Test.java
создаем заголовочный файл Test.h
Bash
1
javah Test
содержимое файла Test.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Test */
 
#ifndef _Included_Test
#define _Included_Test
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Test
 * Method:    test
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_Test_test
  (JNIEnv *, jclass);
 
#ifdef __cplusplus
}
#endif
#endif
Здесь мы видим объявление функции JNIEXPORT void JNICALL Java_Test_test(JNIEnv *, jclass);
Давайте напишем реализацию нативного метода.
Файл Test.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include "Test.h"
 
#ifdef __cplusplus
extern "C" {
#endif
 
JNIEXPORT void JNICALL Java_Test_test (JNIEnv *a, jclass b){
    printf("Hello\n");
}
 
#ifdef __cplusplus
}
#endif
Компилируем dll библиотеку
Bash
1
g++ -x c++ -Wl,--kill-at -shared -I "C:\Program Files\Java\jdk1.7.0_02\include" -I "C:\Program Files\Java\jdk1.7.0_02\include\win32" -o Test.dll Test.cpp
Запускаем
Bash
1
java Test
Вывод в консоль
Код:
E:\proekts\DLL>java Test
Hello
Надеюсь кому-нибудь пригодится.
Размещено в Без категории
Показов 8017 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru