2012-05-20 1 views
0

Eclipse Java 32Bit JDK를 사용합니다. 32 비트 DLL을 가져 오기 위해 노력하고 있습니다.이 DLL에 대한 설명서는 거의 없습니다. com.sun.jna을 사용하고 있습니다. 설명서에 매개 변수없이 InitImagerIPC 메서드를 호출하라는 메시지가 표시됩니다. 나는 오류가 발생하지 DLL을 가져올 때DLL 가져 오기는 UnsatisfiedLinkError를 발생 시키지만 DLL은로드됩니다.

public interface ImagerIPC extends com.sun.jna.win32.StdCallLibrary{ 
    HRESULT InitImagerIPC(); 
} 

:

example 같이 내가 인터페이스를 만들었습니다.

ImagerIPC lib = (ImagerIPC) Native.loadLibrary ("ImagerIPC", ImagerIPC.class); 

내 DLL 이름을 잘못 입력하면 UnsatisfiedLinkError이 표시됩니다. 그래서 올바르게로드 된 것 같아요? 내가

lib.InitImagerIPC(); 

를 호출 할 때

는하지만 난 UnsatisfiedLinkError를 얻을. :(실수는 어디

을 BTW : DLL을 내보내기 뷰어가 원하는 방법에 대해이 정보를 꺼내서 :.

[email protected] 0x10001fc0 0x00001fc0 45 (0x2d) 
    ImagerIPC.dll J:\<my Path>\ImagerIPC.dll Exported Function 

나는 이름에 대해 확실하지 오전 나는 또한 _를 추가해야합니까?

+0

전체 예외 메시지를 포함하여 스택 추적을 제공하십시오. –

+0

'스레드 "main"의 예외 java.lang.UnsatisfiedLinkError : '_InitImagerIPC'함수를 찾는 동안 오류가 발생했습니다 : 오류가 발생했습니다. \t (com.sun.jna.Function) (Function.java:179) com.sun.jna.NativeLibrary.getFunction에서 \t (NativeLibrary.java:344) com.sun.jna.NativeLibrary.getFunction에서 \t (NativeLibrary.java:324) \t에서 COM .sun.jna.Library $ Handler.invoke (Library.java:203) \t $ Proxy0._InitImagerIPC (알 수없는 출처) \t at main.main (main.java:13) ' – Ciprian

답변

2

당신의 DLL은. 당신은 당신이 당신의 라이브러리를로드 Library.OPTION_FUNCTION_MAPPER 옵션로 전달 된 StdCallFunctionMapper를 사용 (또는 라이브러리를 다시 컴파일 할 필요가 일반적으로 인수 '스택 크기를 포함하도록 컴파일러 망글 함수 이름을 가진 stdcall을 호출 규칙을 사용합니다 장식되지 않은 이름을 사용하는 것).

Library.loadLibrary("myLib", myLib.class, new HashMap() { { put(Library.OPTION_FUNCTION_MAPPER, new StdCallFunctionMapper()); } }); 
+0

도움을 주셔서 감사합니다! :) – Ciprian