Возвращение windows.h HANDLE в Java JNI - PullRequest
0 голосов
/ 07 мая 2018

У меня есть метод, который создает подключения последовательного порта на языке C, для которого мы используем тип окна HANDLE, как,

hCom = CreateFile( portNo,
                GENERIC_READ | GENERIC_WRITE,
                0,    // must be opened with exclusive-access
                NULL, // no security attributes
                OPEN_EXISTING, // must use OPEN_EXISTING
                0,    // not overlapped I/O
                NULL  // hTemplate must be NULL for comm devices
                );

Итак, для определенного номера порта я создаю соединение. Теперь я хочу вернуть этот тип HANDLE в мою программу JNI .h. Чтобы в следующий раз я мог выполнять операции с типом HANDLE, например
Отправка / получение через объект , который будет инкапсулировать этот HANDLE.

Но я не могу написать JNI-эквивалент этого типа HANDLE и как сохранить его в Java Object. Может кто-нибудь помочь в этом?
Также, если это возможно, можем ли мы дополнительно выбросить тип DCB из того же файла Windows.h и обработать его в объекте JNI

1 Ответ

0 голосов
/ 08 мая 2018

Посмотрите на определение HANDLE:

typedef void * HANDLE;

Поскольку указатель void не является сложной структурой памяти, он может быть объявлен в Java как long. Для 32-битной архитектуры и int будет достаточно, но если вы просто используете long, то подойдет 32-битная и 64-битная.

DCB - это структура. Чтобы использовать его в Java, вы можете передать байтовый массив, но вам нужно будет знать (т.е. вычислить из файла заголовка) индекс каждого члена структуры, чтобы иметь к нему доступ. Возможно, будет понятнее, если вы создадите выделенный Java-объект для передачи и скопируете значения структуры в своем коде C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...