2016-05-25 2 views
0

私はAndroidプロジェクトをXamarinに移しています。Xamarinとjniを統合する適切な方法

static native int encodeData(long handle, 
    ByteBuffer input, int inputLen, ByteBuffer output, int maxOutputLen); 

で:Androidのプロジェクトはここで外部ライブラリlibmyencoder.so.を参照することが公開される機能の一つのための署名である:次のように

JNIEXPORT jint JNICALL encodeData (JNIEnv *, jclass, jlong, 
    jobject, jint, jobject, jint); 

をJava側では、ネイティブメソッドの宣言は何かでありますXamarinのドキュメント、私はdllimportを使用するいくつかの例を参照してください。これに基づいて、私は次のように私のC#メソッドを宣言できたと思います:

[DllImport ("myencoder",EntryPoint="encodeData")] 
public extern static void encodeData(long handle, ByteBuffer input, 
    int inputLen, ByteBuffer output, int maxOutputLen); 

このC#の定義は正しいですか?

私はエントリーポイントを定義しましたが、どこにでもネイティブメソッドのシグネチャを特に言及していません。これは、次のようになります。

(JLjava/nio/ByteBuffer;ILjava/nio/ByteBuffer;I)I 

は、メソッドの宣言に基づいて適切な署名を推定するのに十分なスマートXamarinエンジンですか?

さらに、libmyencoder.soを私のXamarinプロジェクトディレクトリにコピーしますか?よろしく。

答えて

0

残念ながら、Xamarinからのネイティブ呼び出しはうまく文書化されていません。 githubでいくつかのソースコードを調べて少し実験したところ、 XamarinはJniに依存していないことがわかりました。 Jniのやり方にこだわることを心配する必要はありません。例えば、第1のパラメータはJNIEnv*型である必要はない。また、関数のパラメータとしてjobjectsの代わりにポインタを渡すこともできます。

関連する問題