Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9

Вызов native из dll библиотеки

23.05.2013, 19:46. Показов 2250. Ответов 2
Метки c++, dll, java (Все метки)

Студворк — интернет-сервис помощи студентам
файл Mydll.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Mydll {
    native public static void testfunc();
    static {
        System.loadLibrary("Mydll");
    }
    public static void main(String[] args) {
        try {
        testfunc();
        }
        catch (UnsatisfiedLinkError e) {
            System.out.println("метод не найден");
            e.printStackTrace();
        }
    }
}
dll библиотека компилируется из файла Mydll.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include "mydll.h"
JNIEXPORT void JNICALL Java_Mydll_testfunc(JNIEnv *, jobject){
    printf("Hello1\n");
}
void testfunc(){
    printf("Hello2\n");
}
void Mydll_testfunc(){
    printf("Hello3\n");
}
void Java_Mydll_testfunc(){
    printf("Hello4\n");
}
Весь код компилируется следующим батником:
Bash
1
2
3
4
5
6
set dll=Mydll
javac %dll%.java
javah %dll%
gcc -shared -I "C:\Program Files\Java\jdk1.7.0_02\include" -I "C:\Program Files\Java\jdk1.7.0_02\include\win32" -o %dll%.dll %dll%.cpp
java %dll%
pause>nul
Результат в консоли:
Code
1
2
3
4
5
6
7
8
9
10
11
E:\proekts\Mydll2>set dll=Mydll
E:\proekts\Mydll2>javac Mydll.java
E:\proekts\Mydll2>javah Mydll
E:\proekts\Mydll2>gcc -shared -I "C:\Program Files\Java\jdk1.7.0_02\include" -I
"C:\Program Files\Java\jdk1.7.0_02\include\win32" -o Mydll.dll Mydll.cpp
E:\proekts\Mydll2>java Mydll
метод не найден
java.lang.UnsatisfiedLinkError: Mydll.testfunc()V
        at Mydll.testfunc(Native Method)
        at Mydll.main(Mydll.java:8)
E:\proekts\Mydll2>pause1>nul
Почему не работает и как сделать правильно вызов метода из dll библиотеки и как правильно собрать dll библиотеку?

Добавлено через 1 минуту
файл Mydll.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 Mydll */
 
#ifndef _Included_Mydll
#define _Included_Mydll
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Mydll
 * Method:    testfunc
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_Mydll_testfunc
  (JNIEnv *, jclass);
 
#ifdef __cplusplus
}
#endif
#endif
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.05.2013, 19:46
Ответы с готовыми решениями:

Создание dll библиотеки в C#. Вызов классов этой библиотеки
мне нужно как то создать динамическую библиотеку класов в си шарп, основой этой библиотеки должен быть абстрактный класс, от которого будут...

Вызов из библиотеки (dll) формы (form)
Здравствуйте. Суть такая: пишу библиотеку для подключения к vba. На шарпе присоединить не вышло, на c++ присоединил, простые функции...

Динамический вызов процедур из библиотеки DLL
подскажите пожалуйста. как сделать динамический вызов процедур из библиотеки длл . в окно edit1 вводится ряд чисел через пробел , потом...

2
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
24.05.2013, 07:20
При запуска java нужно указать папку (java.library.path), в которой искать dll:
Code
1
java -Djava.library.path=E:\proekts\Mydll2 Mydll
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
25.05.2013, 11:07  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
При запуска java нужно указать папку (java.library.path), в которой искать dll:
java -Djava.library.path=E:\proekts\Mydll2 Mydll
Не работает. Да и библиотека вроде бы подключается.
Java
1
System.loadLibrary("Mydll");
Если библиотеки в папке нет, генерируется исключение
Code
1
2
3
4
5
6
E:\proekts\Mydll2>java Mydll
Exception in thread "main" java.lang.UnsatisfiedLinkError: no Mydll in java.library.path
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.loadLibrary0(Unknown Source)
        at java.lang.System.loadLibrary(Unknown Source)
        at Mydll.<clinit>(Mydll.java:4)
Такое ощущение, что java вызывает другой метод, а не JNIEXPORT void JNICALL Java_Mydll_testfunc(JNIEnv *, jclass);

Добавлено через 6 минут
или библиотеку компилирую неправильно с неправильным именем метода.

Добавлено через 10 часов 51 минуту
Да, я неправильно компилирую библиотеку dll. В библиотеке метод имеет имя Java_Mydll_testfunc@8 , а java обращается к методу Java_Mydll_testfunc

Добавлено через 13 часов 46 минут
Правильно надо так:
Bash
1
g++ -x c++ -Wl,--kill-at -save-temps -shared -I "C:\Program Files\Java\jdk1.7.0_02\include" -I "C:\Program Files\Java\jdk1.7.0_02\include\win32" -o Mydll.dll Mydll.cpp
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.05.2013, 11:07
Помогаю со студенческими работами здесь

"Не удается загрузить DLL Microsoft.DiaSymReader.Native.amd64.dll не найден указанный модуль"
программа Visual Studio Comunity 2017 выскакивает ошибка при записи информации отладки Не удается загрузить DLL...

Вызов java метода из native
Привет, чтот не пойму зачем у меня ошибка происходит... Значит что хочу и что происходит. Есть активити с TextView и кнопкой. В...

Microsoft.DiaSymReader.Native.amd64.dll
Ребята, подскажите, пожалуйста, кто сталкивался с данной проблемой?? Серьезность Код Описание Проект Файл Строка Состояние подавления ...

Создать одну .DLL из нескольких (Native и .NET)
Всем привет! Можно ли сделать одну .DLL из нескольких, разных платформ/языков? К примеру вот так: Wrapping C++ DLL for use in Excel...

Не удается загрузить Microsoft.DiaSymReader.Native.amd64.dll
Здравствуйте, мои познания в программировании и в самом языке C# пока что очень низки, и дабы практиковать различные примеры показываемые в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru