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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с dll на Java 
:(
    Опции темы
ShkVal
Дата 31.1.2005, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Подскажите можно ли на Java вызвать функции из dll. Если можно то подскажите как или где про это можно прочесть (желательно на русском, если нет на русском то ъоть что)?
PM MAIL   Вверх
Domestic Cat
Дата 31.1.2005, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Ну вот например
http://www.microsoft.com/mind/0198/jdirect.asp

Но вообще зачем это нужно smile Такое проще на С++ или С# сделать...


--------------------

PM   Вверх
ShkVal
Дата 31.1.2005, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Domestic @ 31.1.2005, 11:03)
Ну вот например
http://www.microsoft.com/mind/0198/jdirect.asp

Но вообще зачем это нужно smile Такое проще на С++ или С# сделать...

Тут пример вроде для Microsoft-кой Java.
Может кто-нибудь с этим сталкивался? Опишите вкратце что нужно сделать?

Это сообщение отредактировал(а) ShkVal - 31.1.2005, 11:30
PM MAIL   Вверх
ShkVal
Дата 31.1.2005, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Подскажите. Может кто вызывал методы из dll-файлов написанных на С++ из Java. Как это делается?
PM MAIL   Вверх
ZAVS
Дата 31.1.2005, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



насколько я помню это делается с помощью jni (Java native interface)
посмотри в tutorial-e
--------------------
Учись студент доцентом станешь :)
PM MAIL ICQ   Вверх
chaos
Дата 31.1.2005, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

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



Вот тебе 3 примера, обычно я делаю так
Код


public class DynamicLoad
{
   static public void main (String args[])
       throws InstantiationException, IllegalAccessException
   {
       System.out.println ("DLL is not loaded yet.");

       System.out.println ("Let's find class (and load DLL)");
       try {
           Class c = Class.forName ("ClassFromDLL");

           System.out.println ("Class found (DLL is loaded successfully)");
           c.newInstance();
       } catch (ClassNotFoundException e) {
           System.out.println ("Class not found. Maybe DLL is absent?");
       }
   }
}



Код

public class forNameTest
{

static public void main (String args[])
 throws ClassNotFoundException, InstantiationException, IllegalAccessException
{
 System.out.println ("Let's find class compiled in a separate DLL and "+
                     "create its instance");

 Class.forName("samplePackage.dllClass").newInstance();
}

}


Код

public class ltDllTest
{
 static public void main (String args[])
 {
   dllClass.printSomething();
 }
}


PS Примеры взяты из Excelsior JET

Это сообщение отредактировал(а) chaos - 31.1.2005, 13:11
PM WWW   Вверх
ShkVal
Дата 31.1.2005, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



chaos, что-то я ничего не понял
PM MAIL   Вверх
chaos
Дата 31.1.2005, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

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



Цитата(ShkVal @ 31.1.2005, 13:21)
chaos, что-то я ничего не понял

Чето я напорол не того smile
Это пример написания dll и вызов на java, потом все это компилится в JET
PM WWW   Вверх
AntonSaburov
Дата 31.1.2005, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Можно сделать так:
Написать JNI вызов своей процедуры, котоая уже будет звать нужную dll (так называемый враппер/wrapper)

А вот и статейка с примером: Что такое JNI - простейший пример
PM MAIL WWW ICQ   Вверх
ShkVal
Дата 31.1.2005, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



AntonSaburov, что-то я не понял из этого примера как можно воспользоваться методами dll-ки. Точнее как использовать JNI понятно. Может подскажите методы на С++, чтобы с помощью jni мне вызвать метод dll
Может есть ещё какие-нибудь тулзы, чтобы решить эту задачу (вызвать функцию из dll написанную на С++)

Это сообщение отредактировал(а) ShkVal - 31.1.2005, 19:04
PM MAIL   Вверх
AntonSaburov
Дата 1.2.2005, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Цитата(ShkVal @ 31.1.2005, 16:20)
что-то я не понял из этого примера как можно воспользоваться методами dll-ки.

Ну ты пишешь свой JNI метод для вызова его из JAVA. А из него уже никаких проблем не сосотавит вызвать ту DLL, которая тебе нужна.
Т.е. сначала JAVA вызывает твою JNI dll, а эта dll уже может без каких-либо проблем вызвать стороннюю dll.
PM MAIL WWW ICQ   Вверх
ShkVal
Дата 1.2.2005, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



AntonSaburov, cl -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 -LD JniTest.cpp -FeJniTest.dll. Что это за прога и что-то у меня не запускается. Нашёл какой-то файл "C:\Program Files\Microsoft Visual Studio\VC98\Bin\CL.EXE", но не знаю то ли это что надо?

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


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Да, это именно то самое. Компилятор С++ от Майкрософт. Надо чтобы путь был прописан до него. Обычно при установке Студия спрашивает, прописать ли пути - лучше соглашаться.
PM MAIL WWW ICQ   Вверх
ShkVal
Дата 1.2.2005, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я сделал как в примере всё написано выдаёт ошибку

E:\Test>"C:\Program Files\Microsoft Visual Studio\VC98\Bin\CL.EXE" -I%JAVA_HOME%
\include -I%JAVA_HOME%\include\win32 -LD JniTest.cpp -FeJniTest.dll
Microsoft ® 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright © Microsoft Corp 1984-1998. All rights reserved.

JniTest.cpp
JniTest.h(2) : fatal error C1083: Cannot open include file: 'jni.h': No such file or directory

Хотя всё лежит на месте jni.h лежит в C:\j2sdk1.4.2_05\include
PM MAIL   Вверх
AntonSaburov
Дата 1.2.2005, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



А переменная среды JAVA_HOME есть ?
Я просто ее всегда прописываю. Если нет - то надо использовать полные пути до файлов.
PM MAIL WWW ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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