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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jna вызов функции, повторный вызов функ dll выдает ошибку 
:(
    Опции темы
RuselSt
Дата 3.12.2008, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет. Уже пару дней пытаюсь решить такую проблему:
есть си-шная dll, необходимо в ней запустить функцию, которая по входным данным генерирует файл-изображение. Использую jna, вызов функции делается, файл создается, проблема в том, что первый вызов проходит нормально, а второй вызов этой функции приводит к краху VM.
Вот код вызова:
public class RunBarCode
{
    private static final String image = "image\\q1.bmp";
    private static final String image2 = "image\\q2.bmp";
    private static final String dllNameGBD = "dll\\gbd_bc";

    public interface Gbd_bc extends Library
    {
        Gbd_bc INSTANCE = (Gbd_bc)Native.loadLibrary(dllNameGBD, Gbd_bc.class);
        Gbd_bc SYNC_INSTANCE = (Gbd_bc)Native.synchronizedLibrary(INSTANCE);

        void get_bc_f(String data, int size, String file, String result);

        void get_bc_bin(String data, int size, PointerByReference buffer, IntByReference buff_size, String result);
    }

    public static void main(String[] args) throws IOException
    {    
        Gbd_bc libGbd = Gbd_bc.INSTANCE;
        String resultGbd = "";
        libGbd.get_bc_f("121212345678241108123456", 200, image, resultGbd);
        libGbd.get_bc_f("121212345678241108123455", 200, image2, resultGbd);
        System.out.println("Ok");
}}

После второго вызова get_bc_f, выдается:
#
# An unexpected error has been detected by Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7c910cae, pid=5612, tid=5264
#
# Java VM: Java HotSpot™ Client VM (11.0-b15 mixed mode, sharing windows-x86)
# Problematic frame:
# C  [ntdll.dll+0x10cae]
#
# An error report file with more information is saved as:
# C:\JavaProjects\JNIFirst\hs_err_pid5612.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

Кто-нибудь сталкивался с такой проблемой? может проблема в неправильной работе си-шной библиотеки?
PM MAIL   Вверх
AntonSaburov
Дата 3.12.2008, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


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

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



Очень может быть, что Си виноват - хорошо бы код посмотреть на его стороне.
Там же со строками надо быть аккуратнее.
Я даже в статье писал когда-то - http://antonsaburov.narod.ru/articles/jni.html


Код

#include <stdio.h>
#include "JniTest.h"

JNIEXPORT jint JNICALL Java_JniTest_showString(JNIEnv * jenv, jobject jobj, jstring message)
{
  const char *string = jenv->GetStringUTFChars(message, 0); // Вот так надо строки обрабатывать на Си
  printf("%s\n",string);
  jenv->ReleaseStringUTFChars(message, string);
  return 0;
}


PM MAIL WWW ICQ   Вверх
RuselSt
Дата 24.12.2008, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Все решил проблему, вместо одного из String надо было использовать char[]:

void get_bc_f(String data, int size, String file, char[] result);
void get_bc_bin(String data, int size, PointerByReference buffer, IntByReference buff_size, char[] result);

это как-то связано с кодом на Си, а конкретнее не разобрался. Спасибо
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.0416 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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