我正在尝试使用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