Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2015, 17:26   #1
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию Delphi и JNI

Всех с наступившим Новым Годом!!!!

Вопрос такой, может кто-то и сталкивался с такой же задачей.

Хочу разобраться, каким образом можно выполнить процедуру из DLL ( ДЛЛ соответственно написана на Delphi ) в Java-программе.
-Jack- вне форума Ответить с цитированием
Старый 02.01.2015, 17:44   #2
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Java эксплуатируется на чём, или в чём?
WinCoder вне форума Ответить с цитированием
Старый 02.01.2015, 18:49   #3
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

java applet, Java7, ОС Win
-Jack- вне форума Ответить с цитированием
Старый 02.01.2015, 19:13   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Кажется есть System.loadLibrary(), которая грузит нативную либу.
Мои познания в Джаве на сим заканчиваются, но интернет помогает:
http://www.java-samples.com/showtuto...tutorialid=334
http://habrahabr.ru/post/118027/
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.01.2015, 19:15   #5
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

А dll от делфи разве нативная?
WinCoder вне форума Ответить с цитированием
Старый 02.01.2015, 19:35   #6
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Подгружаем библиотеку
Код:
class HelloWorld
{
  public native void displayHelloWorld();
  static
  {
    System.loadLibrary("MyDelphiLib");
  }
}
Запускаем функцию
Код:
        
        HelloWorld go = new HelloWorld();
        go.displayHelloWorld();
Я в этот раздел написал, потому, что думаю проблема в DLL

Код:
library MyDelphiLib;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  System.SysUtils, System.Classes,
  JNI7;

{$R *.res}

  procedure Java_HelloWorld_displayHelloWorld(PEnv: PJNIEnv; Obj: JObject); {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
  begin
    Writeln('Hello world!');
  end;

  exports
    Java_HelloWorld_DisplayHelloWorld;
end.
-Jack- вне форума Ответить с цитированием
Старый 02.01.2015, 19:59   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Я в этот раздел написал, потому, что думаю проблема в DLL
А я его перенес, потому что вопрос про Java )
Цитата:
Запускаем функцию
И? Не запускается?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.01.2015, 19:59   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Я в этот раздел написал, потому, что думаю проблема в DLL
А я его перенес, потому что вопрос про Java )
Цитата:
Запускаем функцию
И? Не запускается?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.01.2015, 20:17   #9
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Если запускалось бы, то норм было б)))


Код:
Exception in thread "main" java.lang.UnsatisfiedLinkError: main.HelloWorld.displayHelloWorldy()V

 main.HelloWorld.displayHelloWorld(Native Method)
 at main(Main.java:12)
Ругается как раз на вызов функции ...

go.displayHelloWorld();

Последний раз редактировалось -Jack-; 02.01.2015 в 21:35.
-Jack- вне форума Ответить с цитированием
Старый 02.01.2015, 21:05   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Допустим. А если убрать writeln() заменив его на что-то безобидное, например присвоение переменке значения или MessageBox() какой-нить? Всетки write() требует стандартного вывода, и если его нет вполне может лажать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SendMessageA jni WM_LBUTTONDOWN problem ((( Xsires Общие вопросы по Java, Java SE, Kotlin 12 22.11.2012 01:40
вызов Java метода из c++ (JNI) Евгений643 Qt и кроссплатформенное программирование С/С++ 1 26.12.2011 00:58
Интеграция dll написаной на с++ через jni thereisnosun Qt и кроссплатформенное программирование С/С++ 0 30.04.2011 21:41
JNI вызов java методов из С++ belka_cj Общие вопросы по Java, Java SE, Kotlin 0 24.11.2009 19:36
Технология JNI, не работает пример :( lexluther Общие вопросы по Java, Java SE, Kotlin 0 23.11.2008 02:48