2014-06-26 22 views
3

在Emscripten wiki(Interacting with code)中,只有兩種可能的返回類型被列爲ccallcwrap(「數字」和「字符串」)。如何包裝/調用不返回任何東西的函數(void返回類型)?如何在Emscripten中用void作爲返回來包裝或調用C函數?

+1

'undefined'是概念等同


例如,C函數

void test(char* buffer, int buffersize) { // ... } 

可以纏繞。 –

+0

成功使用帶'null'的cwrap作爲返回類型後,我對'undefined'進行了同樣的處理,它似乎也能正常工作。 – jPlatte

回答

4

「null」作爲void函數的返回類型而不是字符串。

例如:

my_fun = Module.cwrap('my_fun', null, ['number', 'number']); 
1

Examples on the site也使用number,因爲它只會被忽略。這就是wiki中使用的例子。

我在我的所有腳本代碼中都使用了它,並且它工作得很好。一般來說,查看emscripten repo的示例文件夾是語法的最佳選擇。此外,這是記錄的使用,所以對未來的變化進行對衝可能會更安全。作爲

var test = Module.cwrap('test', 'number', ['number', 'number']); 
+0

感謝您指點我的例子目錄!我以前不知道它存在。 – jPlatte

+0

關於所有這些「數字」元素:我認爲對於返回類型,我會堅持使用null或undefined,將「數字」放在那裏simpy是沒有意義的。我對第一個參數很好奇:爲什麼用Module._malloc手動分配空間,然後將指針傳遞給包裝函數,而不是簡單地使用'string'作爲參數類型? – jPlatte

+0

我不能給你一個明確的答案,但我肯定會冒險猜測: 它可能是在'string'是一個東西之前寫的,但更可能這個例子更好地測試它並展示更一般的傳遞技巧,如這些測試經常被引用(在wiki中)作爲例子。 – zzmp