Java JNI. Возврат значений из функций
Java JNI. Возврат значений из функций
Пишу dll на ассемблере для подключения к Java через JNI. Не могу разобраться с принципом возврата результатов из нативных функций. Если функция возвращает int или byte, то для этого нужно в регистр EAX положить значение этого int или byte. Например, если в регистр положить 00000001, то функция вернет единицу. А что нужно сделать, чтобы функция возвращала float или String ? Если, в случае с float в регистр класть 4-х байтовое значение float, то результат возвращается как NAN. В случае со строками я кладу в регистр адрес начала строки (offset myString), но ява при этом выдает fatal error..
Re: Java JNI. Возврат значений из функций
Нужно передавать префикс:
C = char
D = double
F = float
I = int
J = long
S = short
Z = boolean
в jvm был api, а че там с dalvik я понятия не имею, нужно спеку читать, а на стороне java иметь wrapper(например http://asm.ow2.org/asm33/javadoc/user/o ... g.Class%29). String - это не примитив и передавать его нужно по чарам.
P.S. вообще это надо спрашивать у тех, кто с NDK чаще работает и что то нативное передает в java, я этой фигней не заморачиваюсь и вполне может быть что есть какой -то стандартный способ.
C = char
D = double
F = float
I = int
J = long
S = short
Z = boolean
в jvm был api, а че там с dalvik я понятия не имею, нужно спеку читать, а на стороне java иметь wrapper(например http://asm.ow2.org/asm33/javadoc/user/o ... g.Class%29). String - это не примитив и передавать его нужно по чарам.
P.S. вообще это надо спрашивать у тех, кто с NDK чаще работает и что то нативное передает в java, я этой фигней не заморачиваюсь и вполне может быть что есть какой -то стандартный способ.
Re: Java JNI. Возврат значений из функций
Как я понял к NDK это особого отношения не имеет. Я не уверен что dll и Android сочетаются.
По топику: не понимаю что мешает возвращать jint, jfloat, jstring и т.д? http://docs.oracle.com/javase/1.5.0/doc ... types.html
По топику: не понимаю что мешает возвращать jint, jfloat, jstring и т.д? http://docs.oracle.com/javase/1.5.0/doc ... types.html
Re: Java JNI. Возврат значений из функций
altwink, klblk, так мне и нужна jvm. Прога под винду, а не под андроид.
C float вроде разобрался - значение (не адрес!) кладется в стек сопроцессора и оттуда уже извлекается JVM. Со строками пока все в тумане. Сегодня попробую переделать JAR файл в EXE и запихнуть его в дизассемблер, может там что увижу..
Мешает то, что непонятно что и куда возвращать. Значение или адрес? В регистр или в стек?klblk писал(а): По топику: не понимаю что мешает возвращать jint, jfloat, jstring и т.д?
C float вроде разобрался - значение (не адрес!) кладется в стек сопроцессора и оттуда уже извлекается JVM. Со строками пока все в тумане. Сегодня попробую переделать JAR файл в EXE и запихнуть его в дизассемблер, может там что увижу..
Re: Java JNI. Возврат значений из функций
Сорри не заметил строчку:
Тогда я пас. Хотя не совсем понимаю почему именно на ассемблере.Realist писал(а):Пишу dll на ассемблере...
Re: Java JNI. Возврат значений из функций
Потому что С++ я знаю откровенно плохо и задуманное (win32-отладчик) оказалось гораздо легче реализовать на асме, тем более что в интернете нашел похожий пример. А теперь появилась необходимость запустить эту программку из под JVM, чтобы обрабатывать данные и красиво выводить на экран. Так что я разбил прогу на несколько функций и оформил в виде dll.klblk писал(а):
Хотя не совсем понимаю почему именно на ассемблере.