Код: Выделить всё
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;
}
Код: Выделить всё
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());
}
Мой вопрос: как я могу представить SomeClass C++ в Java, поэтому что я могу передать это представление из Java в C++ вместо MemorySegment someAddress в строке doSomething.invoke(someAddress) и что я могу позже использовать это представление для вызова ThatRepresentation->GetCount() метод непосредственно в этом классе внутри Java?
Подробнее здесь: https://stackoverflow.com/questions/784 ... ed-via-ffi
Мобильная версия