2

この関数を呼び出そうとしています

bool process(const short* pPCM, size_t num_samples, bool end_of_stream = false);

http://github.com/lastfm/Fingerprinterの Last.FM FingerprintExtractor 開発の fplib 部分から

SWIG (2.0.8) 経由で Ruby (1.9.2) から呼び出そうとしています。

これはこれまでの私のSWIGファイルです

/* */
%define DOCSTRING
"This is a wrapper for The last.fm Fingerprint Extractor library."
%enddef
%module(docstring=DOCSTRING) FingerprintExtractor
%{
#include "../include/fplib/FingerprintExtractor.h"
%}
%include "typemaps.i"
%apply const short *INPUT { const short *pPCM };
%include "../include/fplib/FingerprintExtractor.h"

swig -c++ -ruby FingerprintExtractor.i からの出力

FingerprintExtractor.i:10: Warning 453: Can't apply (short const *INPUT). No typemaps are defined.

私が抱えている問題は、「const」の周りにあると思います。残念ながら、私は C++ と SWIG は初めてです。「const」は変数を強制的に定数にすることを理解しています。これはC ++での良い習慣です。しかし、SWIG でボールをプレーさせる方法がわかりません。メッセージによると、「const short *」宣言のタイプマップを定義する必要がありますが、私の人生ではそれを理解できません。

これを理解するための助けをいただければ幸いです。

http://www.swig.org/Doc1.3/Ruby.htmlの広範なドキュメントを読んだことがありますが、これは悲しいことに私のスキルを超えており、ポインター、配列、定数、typedef、およびタイプマップに関する側面をカバーしていますが、私は持っていませんconstとして宣言されたときに配列へのポインターを渡すことにこれがどのように関連するかを理解できました。「const」の要件を理解するために C++ 言語を確認しました。私は他の実装を見て状況をさらに理解しようとしましたが、もちろんグーグルで検索しました。私が理解できるレベルでは、十分に具体的なものは何もありませんでした。したがって、私の支援のお願いです。

4

1 に答える 1

2

追加してみてください:

%include "stdint.i"

下に:

%include "typemaps.i"

stdint.i には、short を含む一般的な型の typedef があります。

于 2013-07-16T14:49:17.800 に答える