我正在尝试调用此函数
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时,将指针传递给数组。我已经阅读了C ++语言来理解“const”的要求。我试图通过查看其他实现来进一步了解这种情况,当然我已经google了它。没有什么特别的东西能达到我能理解的水平。因此我的求助请求。
答案 0 :(得分:2)
尝试添加:
%包含“stdint.i”
下方:
%包含“typemaps.i”
stdint.i具有常见类型的typedef,包括short。