powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JNA Out параметры
11 сообщений из 11, страница 1 из 1
JNA Out параметры
    #38928897
R@mon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня, коллеги!
Есть sibcash.dll написанная на C. В описании есть функция:
Код: plaintext
1.
int APIENTRY InterDoConnect (HCON * hc)


Description Opens the configured physical connection channel between the CM TCR and the
application.
Parameters hc (O)Как я поднимаю исходящий OUT параметр
Pointer to a variable where the handle of the connection will be returned.
Return Value 1 = Successful
1405= timeout, the physical connection channel has been opned with success but the
recycler is not replying .
1408 = connection failure
1410= connection refused, applies to TCP/IP when the port specified for the connection
is already engaged by another process or workstation.

Написал класс:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
import com.sun.jna.Library;
import com.sun.jna.Native;

public class DkbKassir{
  public interface iSibcash extends Library{        
    int InterDoConnect(String hc);
  }
  private iSibcash sibcash=(iSibcash)Native.loadLibrary("sibcash",iSibcash.class);

  
  private int InterDoConnect(String hc){
    return sibcash.InterDoConnect(hc);
  }

  public static void main(String[] args) throws InterruptedException{
    DkbKassir kassir = new DkbKassir();
    System.out.println(kassir.InterDoConnect(""));    
  }
}


Метод возвращает 1 (Return Value 1 = Successful), соединение устанавливается успешно, но надо что бы еще ссылка на открытое соединение вернулась по средствам out параметра "HCON * hc". Я так понимаю, в JAVA нет out параметров. Как быть в такой ситуации?
...
Рейтинг: 0 / 0
JNA Out параметры
    #38929153
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
R@mon,

а какое отношение
Код: plaintext
1.
HCON * 

имеет к String?
...
Рейтинг: 0 / 0
JNA Out параметры
    #38929221
R@mon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
am_sasaR@mon,

а какое отношение
Код: plaintext
1.
HCON * 

имеет к String?
Это от незнания языка С, это тип данных? Как надо?
...
Рейтинг: 0 / 0
JNA Out параметры
    #38929266
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
R@mon,

можно посмотреть в *.h файлах, что там пишут про этот HCON
...
Рейтинг: 0 / 0
JNA Out параметры
    #38929282
R@mon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
am_sasa,
Вроде нет ничего такого, может я не нашел?
...
Рейтинг: 0 / 0
JNA Out параметры
    #38929305
R@mon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
R@monam_sasa,
Вроде нет ничего такого, может я не нашел?
Увидел, тут int:
Код: plaintext
1.
int APIENTRY InterDoConnect(int *);


Вопрос остается, как организовать out параметр в коде?
Код: java
1.
2.
3.
private int InterDoConnect(/*String*/ int hc){
    return sibcash.InterDoConnect(hc); //для dll sibcash, hc - out параметр
  }
...
Рейтинг: 0 / 0
JNA Out параметры
    #38929346
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
R@mon,

попробуй в этом духе
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public interface iSibcash extends Library{        
    int InterDoConnect(PointerByReference  hc);
  }

PointerByReference ptrRef = new PointerByReference();
sibcash.InterDoConnect(ptrRef);
Pointer p = ptrRef.getValue()
int i = p.getInt(0); // или еще чего, может там не инт...
...
Рейтинг: 0 / 0
JNA Out параметры
    #38929433
R@mon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
am_sasa,
Сделал так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
  private int InterDoConnect(){   
    PointerByReference ptrRef = new PointerByReference();
    int ret=sibcash.InterDoConnect(ptrRef);
    Pointer p = ptrRef.getValue();
    int i = p.getInt(0);
    System.out.println("i="+i);
    System.out.println("ret="+ret);
    return ret;
  }


Получаю ошибку:
Код: java
1.
2.
3.
4.
5.
6.
Exception in thread "main" java.lang.Error: Invalid memory access
    at com.sun.jna.Native.getInt(Native Method)
    at com.sun.jna.Pointer.getInt(Pointer.java:601)
    at schegrov.DkbKassir.InterDoConnect(DkbKassir.java:29)
    at schegrov.DkbKassir.main(DkbKassir.java:45)
Process exited with exit code 1.


Что не так?
...
Рейтинг: 0 / 0
JNA Out параметры
    #38929436
R@mon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
am_sasa,
Использую jna-4.1.0.jar
...
Рейтинг: 0 / 0
JNA Out параметры
    #38929533
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
R@mon,

не знаю, может там 4 байт не дают, а только 2 или один.
...
Рейтинг: 0 / 0
JNA Out параметры
    #38929556
R@mon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
am_sasa,
Получилось так:
Код: java
1.
2.
3.
4.
5.
6.
  private int InterDoConnect(){   
    IntByReference lint = new IntByReference();
    int ret=sibcash.InterDoConnect(lint);
    System.out.println(lint.getValue());
    return ret;
  }


Спасибо большое за помощь!!!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JNA Out параметры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]