2017-11-01 9 views
-1

私はCDRipライブラリ用のラッパーを作成しようとしています。しかし、私はJNIでとても新しいです。JNIを使​​用してDLLメソッドを呼び出すことはできません

int version = CDRipJNI.CR_GetCDRipVersion(); 

DLLが正常にロードされますが、メソッドの呼び出しが失敗した:

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.test.CDRipJNI.CR_GetCDRipVersion()J 
    at com.test.CDRipJNI.CR_GetCDRipVersion(Native Method) 
    at Test.main(Test.java:5) 
を、私は、このメソッドを呼び出して別のクラスでは

public class CDRipJNI { 
    static { 
    System.loadLibrary("CDRip"); 
    } 

    // Get the DLL version number 
    static native int CR_GetCDRipVersion(); 
} 

:私は、ネイティブメソッドが仕事を得るために問題を抱えています

+0

このような方法がありますか?それはJNI DLLですか? – EJP

+0

はい、メソッドが存在し、このシグネチャを持ち、エクスポートされています。私は、DLLはC++で書かれていると思います。 – altralaser

+0

いいえ、「Java」という単語のCの署名があります:それは何ですか? 'JNIEXPORT jint JNICALL Java_com_test_CDRipJNI_CR_1GetCDRipVersion(JNIEnv *、jclass);' – EJP

答えて

0

署名がないメソッドがない場合、Javaクラスが間違っているか、まったくJNI DLLではありません。

のJNI DLLの場合、私はどのような種類のラッパーを書く必要があるのか​​わかりません。

そうではありません。また、JNI DLLでない場合は、それを呼び出す独自のJNI DLLを作成する必要があります。これは、通常のJNIと同様にJavaクラスなどに一致します。

+0

ああ、私はJNIという名前のメソッドを含み、他のDLLのメソッドを内部的に呼び出す独自のDLLを書く必要があるということですか? – altralaser

+0

これは正しいです。 – EJP

+0

今、私はワークフローを理解しています。ありがとう! – altralaser

関連する問題