Java — функция C ++ с указателем в качестве параметра и обработать его с помощью интерфейса Swig

Я создал файл интерфейса Swig для создания JNI для моих файлов C ++. но некоторые из моих файлов C ++ содержат функции, которые принимают указатель в качестве аргумента, например (void *), C ++ BOOL и Swig преобразует его в
типа как SWIGTYPE_p_int32_t как передать такой тип данных из Java?

например, один из реальных прототипов функции, как показано ниже в C ++

DLL_API void DLL_CALLCONV FreeImage_Initialise(BOOL load_local_plugins_only FI_DEFAULT(FALSE));

который конвертируется в файл Java с помощью Swig

public static void FreeImage_Initialise(SWIGTYPE_p_int32_t load_local_plugins_only)

как передать такое значение из java?

У меня есть много классов, которые включают такие аргументы в функцию.
Есть ли способ, чтобы я мог применить решение для массовых файлов для дескриптора типа данных как можно проще.

Я прочитал один способ сделать это, создать вспомогательную функцию, но я не могу пойти на это, потому что у меня есть много классов C ++, и для каждой функции создание вспомогательной функции для возврата указателя не путь.

Пожалуйста, предложите любой другой способ, если это возможно.

0

Решение

Решил сам. Swig не смог распознать все typedef в заголовочных файлах и, следовательно, он создавал такие типы в оболочке. Мне нужно переопределить их в файле интерфейса.

1

Другие решения

О булевых, я бы порекомендовал использовать boolвместо BOOL потому что JNI напрямую предоставляет для него сигнатуру типа: Z (вы можете проверить подписи по адресу: Типы JNI и структуры данных)

Что касается указателей, если указатель на базовые типы, это объявляется путем добавления [перед соответствующей подписью это: int* --> [I, Если это указатель на собственный класс, swig создаст полностью определенный класс.

Надеюсь это поможет.

0

Это из-за странного объявления BOOL тип.

В этом конкретном случае вы можете передать int там со стороны Java. Или 0 или же 1 будет делать правильную работу.

Или вы можете изменить BOOL в bool в вашем родном коде, создав небольшую оболочку для этой библиотеки.

0

SWIG не знает о типах окон. добавлять %include <windows.i> к определению интерфейса.

0
По вопросам рекламы [email protected]