나는 에서 호출 할 타사 VB.Net dll을 갖고 있습니다.VB.Net dll 클래스 및 하위 함수 호출, JNA 함께 Java
VB.Net dll은 (... 의사 코드,하지만 자바 같은 느낌) 다음 서명이 :
class MyClass1 {
public Object method1(StringRef arg1, StringRef arg2) {
// do something here...
return someResult;
}
}
class MyClass2 {
public Object method2(StringRef arg1, StringRef arg2) {
// do something here...
return someOtherResult;
}
}
참고 :StringRef
는 방법을 말하는 내 방식 날에 통과 할 것으로 예상입니다 참조 문자열.
Java에서이 DLL 객체를 호출하려고합니다. JNA를 사용하면 다음과 같은 결과를 얻을 수 있습니다.
import com.sun.jna.Library;
import com.sun.jna.Native;
public interface DllName extends Library {
DllName INSTANCE = (DllName)Native.loadLibrary("DllName", DllName.class);
public static interface MyClass1 {
public Object method1(String arg1, String arg2);
}
public static interface MyClass2 {
public Object method2(String arg1, String arg2);
}
}
INSTANCE
개체는 잘로드됩니다. 그러나, 나는 DllName
의 몸체가 DLL의 클래스 메소드 메쏘드에 매핑하기 위해 취해야하는 구조를 알아 내지 못합니다. 또한 객체를 직접로드하는 방식으로 Native
을 호출하는 방법을 알지 못했습니다. 예를 들어, 내가 할 경우 : DLL이 DllName
라는부터
DllName INSTANCE = (DllName)Native.loadLibrary("DllName.MyClass1", DllName.class);
이것은 UnsatisfiedLinkError
발생합니다. 이 호출을하려면 위와 다른 인터페이스가 필요합니다.
질문 :
- 이도 가능합니까? 예 : 위의 구조에서 JNA를 사용하여 Java에서 VB.Net dll을 호출 할 수 있습니까?
MyClass1
및MyClass2
클래스에 올바르게 매핑하려면DllName
구조가 필요합니까? 이것이 내 핵심 질문입니다.- 위의
DllName.MyClass1
호출에서 대체 방법이 있습니까? - 아래에 언급 된 대안 항목 중 하나라도 놓친 적이 있습니까? 아마도 내가 놓친 다른 해결책이 있을까요?
나는 다음과 같은 대안 탐험 :
- 이 this article을 검토,하지만 내 구조와 일치하는 예를 보지 못했다. 또한 하단에 언급 된 단위 테스트를 살펴 보았습니다.
- 여기에/questions/1556421/use-jni 대신 jna-to-call-native-code (나는 링크로 게시 하겠지만 SO와 충분한 명성은 아닙니다.) 제안 된 C++ 래퍼 만들기). C++에 익숙하지 않아서 실제로 이것을 시도하지 않았습니다. 자바 코드를 약간 변경하면 충분하다고 생각할 때 나는 너무 많이 부딪 힐 것이다.
- JNI : 이것은 C/C++ 유형 dll 전용 인 것처럼 보입니다.
- javOnet : 거의 작동하지만, VB.Net 메소드는 현재 javahnet에서 지원하지 않는 참조로 문자열을 예상합니다. 나는 그 문제를 그들에게보고했고, 나는 해결책을 기대한다. 그것이 작동하더라도 JNA 솔루션이 작동해야하는 것처럼 보입니다. 또한이 솔루션에는 비용 문제가 있습니다.
- jni4net : 제 3 자 dll이므로 나에게 적합하지 않습니다. jni4net은 .Net 쪽에서 약간의 훅을 기대합니다.
여기에 추가 색상을 추가하려면 알려주십시오.
JNA는 여기에서자를 예정이 아닙니다. 이것은 아마도 COM 인터페이스를 내보내므로 [JACOB] (http://sourceforge.net/projects/jacob-project/)을 시도해 보셨습니까? –