我正在嘗試使用JNA從Java調用ALSA庫函數。我已經成功地調用了基本的開放/關閉API snd_pcm_open()和snd_pcm_close(),所以我知道我已經加載了庫和基礎知識。如何從JNA調用ALSA分配#define?
我的應用程序需要用ALSA做的第一件事是調用snd_pcm_hw_params_alloca()來分配一個硬件參數結構。但是,這是在C header file定義爲宏,而不是一個符號:
#define snd_pcm_hw_params_alloca(ptr) __snd_alloca(ptr, snd_pcm_hw_params)
對於C應用程序也將被稱爲像這樣:
snd_pcm_hw_params_t *params;
snd_pcm_hw_params_alloca(¶ms);
和「PARAMS」隨後被傳遞給了後來的很多API調用。
我不是一個C專家,我無法弄清楚這是做什麼。我期望的結構的內存分配,但在頭文件中的下一行定義像snd_pcm_hw_params:
int snd_pcm_hw_params(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
這是否意味着宏觀返回一個指針的函數?我如何在JPA中對此進行建模?
硬件參數的分配通常使用'snd_pcm_hw_params_malloc'完成。你正在討論的函數會在堆棧中分配內存而不是堆。我不是Java專家,但我不認爲堆棧分配對於Java應用程序是有效的 – tay10r