2012-11-11 92 views
2
從Ruby的功能

我想在http://github.com/lastfm/Fingerprinter調用C++通過痛飲

從Last.FM FingerprintExtractor發展fplib的一部分調用這個函數

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

我想在Ruby中調用它(1.9.2)通過SWIG(2.0.8)。

這也是迄今爲止

/* */ 
%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" 

我痛飲文件從痛飲-C++輸出-ruby FingerprintExtractor.i

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

我想我遇到的問題是圍繞「常量」。不幸的是,我是C++和SWIG的新手。我知道「const」強制變量是一個常量,這在C++中是很好的做法。但我無法弄清楚如何讓SWIG打球。根據消息,我需要爲「const short *」聲明定義一個類型映射,但對於我來說,我無法弄清楚它。

任何幫助搞清楚這將不勝感激。

我讀過http://www.swig.org/Doc1.3/Ruby.html的大量文檔,這很遺憾超出了我的技能,同時它涵蓋了指針,數組,常量,類型定義和類型映射的方面,我還沒有弄清楚所有這些與傳遞指針有什麼關係當它聲明爲一個常量時,將其添加到數組中。我已經回顧了C++語言來理解「const」的要求。我試圖通過查看其他實現來進一步瞭解情況,當然我已經使用了它。沒有足夠具體的東西出現在我能理解的水平上。因此我要求協助。

回答

2

嘗試增加:

%包括 「stdint.i」

下方:

%包括 「typemaps.i」

stdint.i具有用於常見類型,包括短的typedef。