Как представить класс C++ в Java для использования через FFI?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как представить класс C++ в Java для использования через FFI?

Сообщение Anonymous »

У меня есть следующий пример кода на C++

Код: Выделить всё

class SomeClass: public ISomeClass
{
private:
int myMember;

public:
SomeClass(int value) : myMember(value) {}
__declspec(dllexport)
int GetCount() override
{
return myMember;
}
};

extern "C" __declspec(dllexport)
int doSomething(ISomeClass** someCl)
{
*someCl = new SomeClass(600);
return (*someCl)->GetCount() + 2;
}
И я успешно использую это в Java с FFI со следующим кодом:

Код: Выделить всё

try(Arena arena = Arena.ofConfined()) {
Linker linker = Linker.nativeLinker();
SymbolLookup my = SymbolLookup.libraryLookup("C:\\Path\\to\\my.dll", arena);
MethodHandle doSomething = linker.downcallHandle(
my.find("doSomething").orElseThrow(),
FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.ADDRESS)
);
MemorySegment someAddress = arena.allocate(ValueLayout.ADDRESS);
int res = (int)doSomething.invoke(someAddress);
System.out.println("Result is " + res);
}
catch (Throwable t)
{
System.out.println("Error is " + t.getMessage());
}
И он правильно выводит 602.
Мой вопрос: как я могу представить SomeClass C++ в Java, поэтому что я могу передать это представление из Java в C++ вместо MemorySegment someAddress в строке doSomething.invoke(someAddress) и что я могу позже использовать это представление для вызова ThatRepresentation->GetCount() метод непосредственно в этом классе внутри Java?

Подробнее здесь: https://stackoverflow.com/questions/784 ... ed-via-ffi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»