Я хочу типизировать общий указатель в hawtjni
(написано на языке Java) который будет генерировать JNI для c++
исходный код. Я немного погуглил и обнаружил, что общий указатель не поддерживается в Java. Теперь я не уверен, что лучше всего будет ввести общий указатель в hawtjni
чтобы C++
Код может понять, что будет вызвана функция с общим указателем.
Например, есть тестовый пример для операции слияния, который требует общего указателя для некоторой инициализации ‘, например:
файл option.h (написанный на c ++)
std::shared_ptr<MergeOperator> merge_operator = nullptr;
hawtjni
(.java) реализация:
@JniField(cast="rocksdb::MergeOperator*")
private long merge_operator;
Ошибка: во время бега mvn clean install
[INFO] src/rocksdbjni_structs.cpp: In function ‘void setNativeOptionsFields(JNIEnv*, jobject, rocksdb::Options*)’:
[INFO] src/rocksdbjni_structs.cpp:258:89: error: invalid cast from type ‘std::shared_ptr<rocksdb::MergeOperator>’ to type ‘intptr_t {aka long int}’
[INFO] env->SetLongField(lpObject, NativeOptionsFc.merge_operator, (jlong)(intptr_t)lpStruct->merge_operator);
Задача ещё не решена.
Других решений пока нет …