1

SWIG を使用して次の C インターフェイスをラップし、Python からアクセスしています。

void some_method(char **output, int paramA, const char *paramB, int paramC);

C での実装では、実行時に malloc() を使用してポインタ *output にメモリを割り当てます。他のパラメーターは読み取り専用で、メソッドに必要な追加情報を伝えます。

対応する SWIG インターフェース ファイルはどのようになりますか?

このケースは、C で動的に割り当てられる「出力」パラメーターのみを渡し、他のパラメーターを渡さない場合は非常に単純です。つまり、私の C インターフェイスが次のようなもので、その実装が example.c (たとえば) の場合:

void some_method(char **output);

次に、このスタックオーバーフロー スレッドで説明されているように、SWIG インターフェース ファイルは単純です。

%module example
%include<cstring.i>
%cstring_output_allocate(char **output, free(*$1));
%{  
    extern void some_method(char **output);
%}
%include example.c

上記は複数のパラメーターでは機能しません。複数のパラメーターを渡す方法と、パラメーターの 1 つ (この場合は「出力」パラメーター) の動的割り当てを許可する方法。

4

2 に答える 2

1

直接的な答えではありませんが、あなたが取り組んでいることは十分に低レベルに聞こえるので、SWIG を放棄してCPython APIを直接使用することを検討することをお勧めします。SWIG は優れていますが、別の依存関係と生成されたコードの負荷が追加されます。

于 2012-04-08T07:46:58.477 に答える