JNA- C ++ 인스턴스에 대한 호출 방법 DLL에서 전달되었습니다.

StackOverflow https://stackoverflow.com/questions/1873194

  •  18-09-2019
  •  | 
  •  

문제

다음과 같은 단일 내보내기 방법이있는 C ++ DLL이 있다고 가정 해 봅시다.

CustomerProcessor* getInstance();

즉, 실제로 전화 해야하는 방법이 포함 된 클래스의 인스턴스를 반환합니다.

getInstance () 메소드를 JNA (com.sun.jna.library)를 사용하여 java 클래스에 매핑하고 반환 된 고객 프로세서 인스턴스를 com.sun.jna.pointer에 저장할 수 있습니다.

그런 다음 어떻게 든 이것을 고객 프로세서 클래스에 매핑하여 메소드를 호출 할 수 있도록 (그렇다면 어떻게)

도움이 되었습니까?

해결책

임의의 경우 type* function() 정의 JNA를 사용하여 메소드를 맵핑 할 수 있습니다. com.sun.jna.Pointer, 그러나 JNA의 C ++ 객체에서 메소드를 호출 할 수는 없습니다.

이에 대한 간단한 해결 방법은 단순히 객체의 메소드를 호출하는 C 인터페이스 라이브러리를 작성하는 것입니다. foo() C ++ 코드에서 C 메소드를 내보낼 수 있습니다.

extern "C" void bar(type* var){
   var->foo();
}

분명히 이것은 당신을 위해 약간의 작업을 추가 할 것입니다 ... 그러나 나는 전환하기위한 오버 헤드가 의심됩니다. JNI 거의 동일 할 것입니다.

다른 팁

Jnaerator 당신이 요구하는 일을 촉진 할 수 있습니다. 그것은 demangling 및 vtable 액세스에 대한 지원이 있습니다 (이 방법 *호출에 필요).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top