2013-12-12 18 views
5

私はC言語でいくつかのコードを持っていますが、メソッドの1つに引数として関数ポインタがあります。私はAndroidアプリでCコードを使用しようとしています。SWIG C関数ポインタとJAVA

SWIGを使用して、必要なJavaファイルを生成するすべての作業を行うことにしました。すべてが通常の関数(引数として関数ポインタを持たない関数)でうまくいきます。

しかし、C関数へのコールバックとしてJAVAメソッドをどのように渡すことができるのかよく分かりません。ここで

は一例です。ここ

は私のmultiply.hファイルはここに

typedef int (*callback_t) (int a, int b, int c); 

int foo(callback_t callback); 

であるここに私のmultiply.cファイル

#include <stdio.h> 
#include "multiply.h" 

int foo(callback_t callback) 
{ 
    return callback(2, 4, 6); 
} 

は私のインターフェイスファイル乗算-がぶ飲みです。 i

%module example 
%{ 
/* Includes the header in the wrapper code */ 
#include "multiply.h" 
%} 

/* Parse the header file to generate wrappers */ 
%include "multiply.h" 

は、私が

swig -java -package com.example.ndktest -o multiply-wrap.c mulitiply-swig.i 

を必要とするJavaファイルを生成するには、次のがぶ飲みのコマンドを実行し、次のファイルが生成さSWIG:

example.java

package com.example.ndktest; 

public class example { 
    public static int foo(SWIGTYPE_p_f_int_int_int__int callback) { 
    return exampleJNI.foo(SWIGTYPE_p_f_int_int_int__int.getCPtr(callback)); 
    } 

} 

exampleJNI.java

package com.example.ndktest; 

public class exampleJNI { 
    public final static native int foo(long jarg1); 
} 

SWIGTYPE_p_f_int_int_int__int.java

package com.example.ndktest; 

public class SWIGTYPE_p_f_int_int_int__int { 
    private long swigCPtr; 

    protected SWIGTYPE_p_f_int_int_int__int(long cPtr, boolean futureUse) { 
    swigCPtr = cPtr; 
    } 

    protected SWIGTYPE_p_f_int_int_int__int() { 
    swigCPtr = 0; 
    } 

    protected static long getCPtr(SWIGTYPE_p_f_int_int_int__int obj) { 
    return (obj == null) ? 0 : obj.swigCPtr; 
    } 
} 

私のjavaコードからこのfooメソッドを呼び出すにはどうすればよいですか?引き数の型はSWIGTYPE_p_f_int_int_int__intですか?私は、明らかに感謝

+2

Javaで同様の使用例の作業例を書いています。http://stackoverflow.com/a/12251183/168175 – Flexo

答えて

0

、すべてのヘルプは高く評価されて....私は、私は間違いなくここに何かが足りないと思う...私はCコードへのコールバックとしてJavaメソッドを渡すことができますどのようにあなたを

を理解していません単一のメソッドを引数として渡すことはできません。しかし、インターフェイスにコールバックを実装することで、 "Director"機能でもコールバックが可能です。 this exampleを参照してください。

+3

Cでの例はありますか? cppじゃない? – pdiddy

関連する問題