Native calls from Java.

User avatar
Irrene
Уже с Приветом
Posts: 300
Joined: 13 Aug 2003 18:32

Native calls from Java.

Post by Irrene »

Я работаю с кодом, написанным на Java. В некоторых классах есть вызов C функций. Я зделала небольшую модификацию: добавила один аргумент (double) к аргументам, передаваемым в C функцию и это привело к регрессии моих тестируемых проектов. Новый параметр нигде в формулах не используется (пока). Проискодит только его передача. Кто-нибудь может объяснить, что происходит? Проверку на дурацкие ошибки, т.е. правильный тип нового аргумента и правильный порядок в списке я сделала первым делом.
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Re: Native calls from Java.

Post by A. Fig Lee »

Irrene wrote:Я работаю с кодом, написанным на Java. В некоторых классах есть вызов C функций. Я зделала небольшую модификацию: добавила один аргумент (double) к аргументам, передаваемым в C функцию и это привело к регрессии моих тестируемых проектов. Новый параметр нигде в формулах не используется (пока). Проискодит только его передача. Кто-нибудь может объяснить, что происходит? Проверку на дурацкие ошибки, т.е. правильный тип нового аргумента и правильный порядок в списке я сделала первым делом.


Как я понял Вы работаете только с ява кодом. Вам надо поправить JNI файлы - file.h i file.c и за пустить маке - перекомпилировать *so - (kstati, eto UNIX?)

Мона запустить javah, но он может попортить хедер файл, придется ручками править.
Помоему так.
Верить нельзя никому - даже себе. Мне - можно!
User avatar
Irrene
Уже с Приветом
Posts: 300
Joined: 13 Aug 2003 18:32

Re: Native calls from Java.

Post by Irrene »

A. Fig Lee wrote:Как я понял Вы работаете только с ява кодом. Вам надо поправить JNI файлы - file.h i file.c и за пустить маке - перекомпилировать *so - (kstati, eto UNIX?)

Мона запустить javah, но он может попортить хедер файл, придется ручками править.

Я не использую header file. После внесенных изменений все было перекомпелировано. Система-Win2000.
User avatar
geek7
Уже с Приветом
Posts: 20297
Joined: 01 Dec 2003 23:16
Location: Russia->USA

Re: Native calls from Java.

Post by geek7 »

Irrene wrote:Я не использую header file. После внесенных изменений все было перекомпелировано. Система-Win2000.

Так Вы только на Java стороне поменяли, а C нетрогали ?
User avatar
Irrene
Уже с Приветом
Posts: 300
Joined: 13 Aug 2003 18:32

Re: Native calls from Java.

Post by Irrene »

geek7 wrote:Так Вы только на Java стороне поменяли, а C нетрогали ?

На С стороне я добавила новый аргумент в списке принимаемых аргументов.
Может использование оптимизатора как-то влияет?
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Re: Native calls from Java.

Post by A. Fig Lee »

Irrene wrote:
geek7 wrote:Так Вы только на Java стороне поменяли, а C нетрогали ?

На С стороне я добавила новый аргумент в списке принимаемых аргументов.
Может использование оптимизатора как-то влияет?


Как ето Вы не используете хедер файлы?
JNI с помощью javah производит хеадер файл базируясь на Ява файле. поцле етого пишется имплементация в c файле. Использование оптимизатора не влияет.

Может у Вас длл которая создается потом копируется куда нибудь, а Вы не скопировали?

http://java.sun.com/docs/books/tutorial/native1.1/
Верить нельзя никому - даже себе. Мне - можно!
User avatar
Irrene
Уже с Приветом
Posts: 300
Joined: 13 Aug 2003 18:32

Re: Native calls from Java.

Post by Irrene »

A. Fig Lee wrote:Как ето Вы не используете хедер файлы?
JNI с помощью javah производит хеадер файл базируясь на Ява файле. поцле етого пишется имплементация в c файле. Использование оптимизатора не влияет.

Может у Вас длл которая создается потом копируется куда нибудь, а Вы не скопировали?

http://java.sun.com/docs/books/tutorial/native1.1/

Спасибо за ссылку. У меня немного другая система. Я использую Mathematica для генерации кода. Гененируется *.cpp файл, в теле которого есть такие строчки:
#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif
Процесс вплоть до создания dll полностью автоматизирован, так что dll всегда сбрасывается в нужное место.
В любом случае спасибо. Похоже, мне надо еще раз "sanity check" сделать.

Return to “Вопросы и новости IT”