2012-05-13 6 views
4

私はファイルがEffect.hファイルに依存しています。Android NDK - 別のヘッダーにC++ヘッダーを含める?

は、私は私のヘッダを生成するjavahがを使用する必要があるが、私はC++ヘッダが生成されることがしたい、そこから私のAbility.javaクラスのエフェクト依存を定義することができませんでしです。

例:それはそれを認識できなかったかのように

public class Ability { 

    static { 
    System.loadLibrary("com_test_Effect"); 
    System.loadLibrary("com_test_Ability"); 
    } 

    public native Effect foo(Effect x); 

} 

このコードは、foo()機能なし* .hファイルを生成します。戻り型をintにスワップし、com_test_Effectを含めないと、適切なファイルが生成されます。

私はAndroid.mkファイル(com_test_Effectとcom_test_Ability)で定義されたモジュールの両方を持っています。

が生成されるXyz.javaクラスに直接別のC++ファイルを含める方法javah

編集:質問には、次のように質問することもできます:C++型引数を渡す方法、またはC++とJavaの間のインターフェイスである関数からC++型の値を返す方法はありますか? (インターフェースメディアはJNIです。)例えば、intのような基本的な型を使って、それをjintに変換するなどします。

+0

を "com_test_Effectが含まれていません"。その部分は効果がありません。あなたはここに何も「含まれていません」、実行時にライブラリをロードしています。それはJavaコンパイラや 'javah'に魔法の影響を与えません。 'Effect'クラスをコンパイルしてもらえますか? – EJP

+0

@EJPはい、エフェクトはコンパイルされますが、それは何にも依存しないからです。私は、javahが適切な* .hファイルを生成できるように、Xyz.javaでC++型を使用する方法を知りました。 – ScarletAmaranth

+0

@EJP私はそこに "効果"を使用したくないと仮定しますが、std :: stringです。 stlが有効になっていることを考えると、私はまだヘッダーを含めることはできません。さて、私は* .cppファイルではできますが、C++ヘッダーではできません。 – ScarletAmaranth

答えて

-1

オブジェクトを返すことについてはどう:

private native Object fooNative(Object x); 

そして、それは同じシグネチャを持つようにそれを変換:

public Effect foo(Effect x) { 
    return (Effect)fooNative(x); 
} 
関連する問題