我正在尝试移植此代码:
struct SoundIoChannelLayout { const char *name; int channel_count; enum SoundIoChannelId channels[SOUNDIO_MAX_CHANNELS]; };
但我不知道如何定义 channels 的类型,我知道我可以't use a pointer because the final struct size won'是相同的 .
channels
我能够使用crystal_lib自动生成它:
$ cd crystal_lib $ cat examples/soundio.cr @[Include("soundio/soundio.h", prefix: %w(SoundIo))] @[Link("soundio")] lib LibSoundio end $ crystal src/main.cr -- examples/soundio.cr > soundio.cr
所以它看起来像这样:
@[Link("soundio")] lib LibSoundio MAX_CHANNELS = 24 struct ChannelLayout name : LibC::Char* channel_count : LibC::Int channels : ChannelId[MAX_CHANNELS] end enum ChannelId Invalid = 0 FrontLeft = 1 FrontRight = 2 FrontCenter = 3 # ... end # ... end
注意:您可能需要手动更新结果文件,因为crystal_lib仍处于试验阶段 .
1 回答
我能够使用crystal_lib自动生成它:
所以它看起来像这样:
注意:您可能需要手动更新结果文件,因为crystal_lib仍处于试验阶段 .