2017-08-22 1 views
-1

現在、JNIを使​​用してJavaプログラムをdllにリンクすることが任されています。私はネイティブメソッドなどを書き、メモリにDLLをロードし、手順を知っているしかし、私は唯一のdllを与えられたので、私は私が知っている私にJNIを使​​用したJavaからのDLLメソッドの呼び出し

[email protected] 
[email protected] 

のようなものを示したDLL内のメソッドを表示するために、依存関係ウォーカーを使用しましたメソッドのシグネチャだけでなく戻り値の型も問題ですが、問題はaudioInitialization_Audioです。これはAudioInitialization内の別のクラスですか、これはパッケージの下ですか?

私は誰でも続行する方法を知っている

public class audioInitialization{ 
    static{ 
     System.load("C:\\AudioInitialization.dll"); 
    } 

public static class Audio{ 
    public native boolean setAudioParameters(int a, int b, int c); 
    public native boolean setVolume(int vol); 
} 

public static void main(String args[]){ 
    System.out.println(new audioInitialization.Audio().setVolume(10)); 
} 

} 
// results in UnsatisfiedLinkError: setVolume 

アクセスをしようとする私のJavaプログラムでは、このようなものを書きましたか?

+0

。少なくとも.classファイル。メソッドのシグネチャは 'javap'で取得できます。あなたはそれを持っていない場合は、とにかくコードを実行することはできません。 – EJP

+0

私は自分が望むものを得る立場にいません。もし私がそれをしたら、私はここにいないでしょう? – user2609825

答えて

0

の中のクラスのように見えます。オーディオイニシャライズパッケージです。私は下のJavaクラスのテストJNIヘッダ生成だ:

public class ParentClass{ 
    public native int parentGetInt(); 

    public static class NestedClass{ 
     native int nestedGetInt(); 
    } 
} 

、結果は二つの方法である:

  1. 親クラスのために:

    JNIEXPORT jint JNICALL Java_my_package_ParentClass_parentGetInt(JNIEnv *, jobject) 
    
  2. とネストしたクラスのため:

    JNIEXPORT jint JNICALL Java_my_package_ParentClass_00024NestedClass_nestedGetInt(JNIEnv *, jobject) 
    
あなたのケースでは

Audioがネストされたクラスだった場合、JNIメソッドのシグネチャは次のようになります。あなたは、JavaコードがDLLに対応する与えられている必要があります

[email protected] 
[email protected] 
+0

こんにちは、ありがとう、それは仕事になった、それはあなたが正しいパッケージに実際にあった! – user2609825

関連する問題