У меня есть файл Ability.h
, который зависит от файла Effect.h
.Android NDK - Включить заголовок C++ в другой заголовок?
мне нужно использовать javah генерировать свой заголовок, но я не в состоянии определить зависимость эффекта в моем Ability.java
класса, от которого я хотел бы C++ заголовок для генерации.
Пример:
public class Ability {
static {
System.loadLibrary("com_test_Effect");
System.loadLibrary("com_test_Ability");
}
public native Effect foo(Effect x);
}
Этот код генерирует * файл .h без функции foo()
, как если бы он не мог распознать его. Он генерирует правильный файл, если я меняю тип возврата на int и не включаю com_test_Effect.
У меня есть оба модуля, определенные в файле Android.mk (com_test_Effect и com_test_Ability).
Как включить другое C++ файл непосредственно в Xyz.java
класс, из которого *.h
генерируется javah?
Редактировать: вопрос также может быть задан следующим образом: Есть ли способ передать аргументы типа C++ или вернуть значение типа C++ из функции, которая является интерфейсом между C++ и Java? (Интерфейс связи - JNI.) Например, вы можете сделать это с помощью базовых типов, таких как int, которые затем преобразуются в jint и так далее.
"не включают в com_test_Effect". Эта часть этого не имеет никакого эффекта. Вы здесь не «включаете», вы загружаете библиотеки во время выполнения. Он не имеет магического эффекта для компилятора Java или 'javah'. Я бы спросил, собрал ли вы класс «Эффект»? – EJP
@EJP Да, эффект скомпилирован, но только потому, что он ничем не зависит. Интересно, как использовать C++-типы в Xyz.java, чтобы затем javah мог сгенерировать правильный * .h-файл. – ScarletAmaranth
@EJP Предположим, я не хочу использовать «Эффект» там, но std :: string. Учитывая, что stl включен, я до сих пор не могу включить заголовок. Ну, я могу сделать это в файле * .cpp, но не в заголовке C++. – ScarletAmaranth