Как передать аргумент void** с помощью Java FFM API?
void initHandle(void* handle);
void useHandles(void** handles);
У меня не сработало следующее:
var LINKER = Linker.nativeLinker();
var SYM_LOOKUP = SymbolLookup.loaderLookup().or(LINKER.defaultLookup());
var INIT_HANDLE = LINKER.downcallHandle(SYM_LOOKUP.find("init_handle").orElseThrow(), FunctionDescriptor.ofVoid(ADDRESS));
var USE_HANDLES = LINKER.downcallHandle(SYM_LOOKUP.find("use_handles").orElseThrow(), FunctionDescriptor.ofVoid(ADDRESS));
try (var arena = Arena.ofConfined()) {
List handleList = new ArrayList();
for (int i = 0; i < 5; i++) {
var handle = arena.allocate(ADDRESS);
INIT_HANDLE.invokeExact(handle);
handleList.add(handle);
}
// ...
var handlesHandle = arena.allocate(ADDRESS, handleList.size());
for (int i = 0; i < handleList.size(); i++) {
handlesHandle.setAtIndex(ADDRESS, i, handleList.get(i).get(ADDRESS, 0));
}
USE_HANDLES.invokeExact(handlesHandle.get(ADDRESS, 0)); // this is not working as expected
}
Подробнее здесь: https://stackoverflow.com/questions/789 ... va-ffm-api
Передайте аргумент типа void** (указатели указателей) с помощью Java FFM API. ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Преобразование связанного списка из необработанных указателей в интеллектуальные указатели
Anonymous » » в форуме C++ - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-