2013-05-09 4 views
2

나는 얼마 전에 JNA에서 일해 왔습니다. 하지만 한 가지가 있습니다. 나는 이해하지 못했습니다. 예를 들어, 라이브러리를로드하는 동안 :Native.loadLibrary의 옵션

Map<String, Integer> options = new HashMap<String, Integer>(); 
options.put(Library.OPTION_CALLING_CONVENTION, StdCallLibrary.STDCALL_CONVENTION); 
this.EDSDK = (EdSdkLibrary) Native.loadLibrary("EDSDK/dll/EDSDK.dll", EdSdkLibrary.class, options); 

위의 options 정확히 무엇입니까?

api는 말한다 :

공공 정적 개체의 loadLibrary (문자열 이름, 클래스 interfaceClass, 지도 옵션)

로드 라이브러리 주어진 공유 라이브러리의 인터페이스, 명시 적 인터페이스 클래스를 제공하고 라이브러리에 대한 옵션 맵. 라이브러리 옵션이 감지되지 않으면 맵은 Java 메소드 이름 대 원시 함수 이름의 맵으로 해석됩니다. name이 null 인 경우 현재 프로세스에 매핑하려고 시도합니다.

무엇보다 map of options for the library은 무엇을 의미합니까?

답변

3

라이브러리 옵션이 들어있는지도입니다. 그러한 옵션 중 하나는 함수 맵퍼입니다.

System.setProperty("jna.library.path","SiUSBXp.dll"); 
    HashMap<String, StdCallFunctionMapper> optionMap = new HashMap<String, StdCallFunctionMapper>(); 
    StdCallFunctionMapper myMapper = new StdCallFunctionMapper(); 
    optionMap.put(Library.OPTION_FUNCTION_MAPPER, myMapper); 
    INSTANCE = (SiUSBXp) Native.loadLibrary("SiUSBXp", SiUSBXp.class, optionMap); 
+0

미안하지만, 당신이 library.'에 매핑 기능을 보유하고지도'무엇을 의미합니까 : 당신이 아래 은 예를 찾을 수 있습니까? – Jatin

+1

이것은 메소드의 이름을 의미합니다 –

+1

JNA의 초기 릴리스는 함수 매퍼 옵션 대신'Map'을 사용했습니다. 'Map' 키는 자바 메소드이고, 값은 매핑 된 네이티브 메소드입니다. – technomage