Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Технология JNI, не работает пример :( 
:(
    Опции темы
lexluther
Дата 23.11.2008, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 26.10.2004

Репутация: нет
Всего: нет



Всем привет,

Занялся изучением технологии JNI и столкнулся с проблемой. Мой пример не работает хотя код написан по всем правилам.

Код C++ библиотеки сгенерированный при помощи javah:

#include <windows.h>
#include <jni.h>

extern "C" JNIEXPORT void JNICALL Java_MyJavaPackage_NextLevelClass_ShowCall(JNIEnv *, jobject);

И

#include "MyJavaPackage_NextLevelClass.h"

extern "C" JNIEXPORT void JNICALL Java_MyJavaPackage_NextLevelClass_ShowCall
  (JNIEnv *, jobject)
{
    MessageBox(NULL,"TEST","TEST",MB_OK);
}

Есть класс в котором я определил внешний нейтивный метод:

package MyJavaPackage;

public class NextLevelClass{
          
    static {
        try{
            System.load("G:\\Documents and Settings\\artiom\\My Documents\\NetBeansProjects\\MyDesktopApplication\\dist\\lib\\MyDynamicLibrary.dll");
        }
        catch(UnsatisfiedLinkError g)
        {
            System.out.print(g.getMessage() + " LIBRARY EXCEPTION");
        }
    }
    
    private static native void ShowCall();
    
    public void GiveIt()
    {
        try{
            ShowCall();
        }
        catch(UnsatisfiedLinkError g)
        {
            System.out.print(g.getMessage() + " METHOD EXCEPTION\n");
        }
    }
}

Сам код в вызывающей программе выглядит следующим образом:

        NextLevelClass NLC1 = new NextLevelClass();
        
        NLC1.GiveIt();

В результате при выполнении библиотека сама загружается идеально, но при вызове метода ShowCall возникает исключение UnsatisfiedLinkError. Подскажите пожалуйста в чем может быть проблема?

Версия ОС:
Windows XP Service Pack 3

Версия JAVA (java -version):
java version "1.6.0"
Java™ SE Runtime Environment (build 1.6.0-b105)
Java HotSpot™ Client VM (build 1.6.0-b105, mixed mode, sharing)

Среда разработки (About окно):
Product Version: NetBeans IDE 6.1 (Build 200805300101)
Java: 1.6.0; Java HotSpot™ Client VM 1.6.0-b105
System: Windows XP version 5.1 running on x86; Cp1251; uk_UA (nb)
Userdir: G:\Documents and Settings\artiom\.netbeans\6.1
PM MAIL   Вверх
Samotnik
Дата 23.11.2008, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



оберни весь код в теги во всех своих темах
тогда и поговорим  smile 
очень трудно так смотреть что к чему 
PM MAIL   Вверх
rygel
Дата 23.11.2008, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 21.9.2007
Где: Харьков

Репутация: 6
Всего: 7



у вас в аргументе метода:
Код

extern "C" JNIEXPORT void JNICALL Java_MyJavaPackage_NextLevelClass_ShowCall(JNIEnv *, jobject);
 
второй аргумент ссылается на объект класса NextLevelClass, хотя метод в классе объявлен как статический:
Код

private static native void ShowCall();


и объявление должно выглядеть так:

Код

extern "C" JNIEXPORT void JNICALL Java_MyJavaPackage_NextLevelClass_ShowCall(JNIEnv *, jclass);


Это означает что вам нужно или убрать static из объявления метода в классе, или перегенерить файл хедера (но еще проще изменить jobject на jclass)

PM MAIL   Вверх
ivg
Дата 24.11.2008, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 33
Всего: 81



<Dll project> -> Properties -> Build/Linker -> Command Line/Additional Options: в поле добавить
Код
-Wl,--kill-at

Вкратце объяснение, например, тут
PM MAIL   Вверх
barin_Student
Дата 24.11.2008, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

Репутация: 1
Всего: 2



Дублируете темы с другого форума... smile 
И там тоже код нормально не оформлен... smile 


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
SoulKeeper
Дата 24.11.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

Репутация: 11
Всего: 15



Цитата(ivg @ 24.11.2008,  02:02)
<Dll project> -> Properties -> Build/Linker -> Command Line/Additional Options: в поле добавить
Код
-Wl,--kill-at

Вкратце объяснение, например, тут

Мда....

А вот Visual Studio 2008 батотает с JNI идеально smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0892 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.