0

C++ ファイル用の JNI を作成するための swig インターフェイス ファイルを作成しました。しかし、私のC++ファイルの中には、 (void*) のような引数としてポインタを受け入れる関数が含まれており、C++ BOOLとSwigはそれをSWIGTYPE_p_int32_tのような型に変換します java からそのような種類のデータ型を渡すには?

たとえば、関数の実際のプロトタイプの 1 つは、C++ では次のようになります。

DLL_API void DLL_CALLCONV FreeImage_Initialise(BOOL load_local_plugins_only FI_DEFAULT(FALSE));

swigでJavaファイルに変換されます

public static void FreeImage_Initialise(SWIGTYPE_p_int32_t load_local_plugins_only)

java からそのような値を渡す方法は?

関数にそのような種類の引数を含む多くのクラスがあります。可能な限り単純なハンドル データ型のバルク ファイルにソリューションを適用できる方法はありますか。

それを行う1つの方法はヘルパー関数を作成することだと読みましたが、多くのc++クラスがあり、すべての関数に対してポインターを返すためのヘルパー関数を作成する方法がないため、それを実行することはできません。

可能であれば、他の方法を提案してください。

4

4 に答える 4

1

自分で解決しました。Swig はヘッダー ファイル内のすべての typedef を認識できなかったため、ラッパーでそのようなタイプを生成していました。インターフェイスファイルでそれらを再定義する必要があります。

于 2013-11-14T13:00:29.070 に答える
0

SWIG はウィンドウの種類を認識していません。%include <windows.i>インターフェイス定義に追加します。

于 2013-11-15T21:09:32.990 に答える
0

これは、BOOL型の宣言がおかしいためです。

intこの特定のケースでは、Java 側からそこに渡すことができます。またはどちら01が正しい仕事をします。

または、このライブラリの小さなラッパーを作成して、ネイティブ コードを変更BOOLすることもできます。bool

于 2013-11-14T10:50:47.487 に答える