2

次のような C 関数があります。

int make_call(char* to, int *call_id);

および非常に単純なインターフェイス ファイル:

%include "typemaps.i"
%include "enums.swg"
%include "arrays_java.i"

%header %{
#include <my_header.h>
%}

/* Map "int*" as input & output */
%apply int *INOUT  { int * };

これはうまくいきます。私のSWIGファイルでは、 public static int make_call(String to, int[] call_id) {..} を取得し、1つの要素でint []を作成して呼び出すことができます。これまでのところすべて順調です。

ただし、call_id は非常に大きくなる可能性があるため、長くする必要があるため、C API でこれを変更し、.i ファイルに次の行を追加しました。

%apply long *OUTPUT  { long * };

SWIGのjava.htmlドキュメントに記載されていることを適用しようとするなど、いくつかのバリアントを試しましたが、常にint [] beeingが生成されるか、Javaから使用できない長いswigtypeになります。私が期待している long[] を生成させることができません。

私はそれを次のようにダブルにしてみました:

%apply double *OUTPUT  { double * };

期待どおりに動作し、生成されたインターフェイスで double[] call_id を取得します。

ロングタイプの落とし穴はありますか?奇妙に思えますよね?

4

1 に答える 1