2014-06-10 2 views
0

내 Java 코드에서 만든 VB .NET DLL 메서드에 액세스하려고합니다. JNA를 사용하여이 작업을 수행하려고합니다.'HelloWorld'함수를 찾는 동안 오류가 발생했습니다. 지정한 프로 시저를 찾을 수 없습니다.

내 Java 코드는 다음과 같습니다.

:

Hello.java는

import com.sun.jna.Native; 

public class Hello { 

public static void main(String[] args) { 
    String myPath = System.getProperty("user.dir"); 
    System.setProperty("java.library.path", myPath); 
    NativeInterface nInterface = (NativeInterface) Native.loadLibrary(
      "SampleDLLProject", NativeInterface.class); 
    nInterface.HelloWorld(); 

    } 

} 

그리고 여기가 직면하고 NativeInterface.java

import com.sun.jna.*; 

public interface NativeInterface extends com.sun.jna.Library { 

    public void HelloWorld(); 
} 

오류가있는 인터페이스를의 (DLL이 메소드를 호출)

스레드 "main"의 예외 java.lang.UnsatisfiedLinkError : 'HelloWorld'함수를 찾는 동안 오류가 발생했습니다 : 지정된 프로 시저를 찾을 수 없습니다. com.sun.jna.Function. (Function.java:179) com.sun.jna.NativeLibrary.getFunction (NativeLibrary.java:345) at com.sun.jna.NativeLibrary.getFunction (NativeLibrary.java : Hello.main에서 $ Proxy0.HelloWorld (알 수없는 소스) 에서 com.sun.jna.Library $ Handler.invoke (Library.java:203) 325) (Hello.java:10)

또한 나는 ildasm을 사용하여 어떤 종류의 불일치에 대해서도 dll을 검사했습니다.

enter image description here

는 Hello.java의 DLL 및 이름 본 메소드 이름 사이에는 차이가 없다.

흥미롭게도, 나는 윈도우 dll msvcrt.dll의 puts() 메소드에 대한 코드를 테스트하려고 시도했지만 완벽하게 정상적으로 작동합니다. 그래서 문제는 DOT NET dll입니다. 도와주세요!

답변

1

사용중인 라이브러리는 네이티브 라이브러리 (예 : windows.dll 및 msvcrt.dll)에서로드하는 데 사용되며,이 라이브러리는 x86 또는 x64 프로세서에서 직접 실행할 수있는 원시 코드로 컴파일됩니다.

VB.NET에서 만든 라이브러리는 이 아니며 네이티브 라이브러리이며 CIL (Common Intermediate Language)으로 컴파일 된 CLI (Common Language Infrastructure) 어셈블리이며 모든 종류의 프로세서를 실행하기 위해 즉시 컴파일됩니다 자바처럼!)