首页 文章

如何在C绑定中使用数组类型?

提问于
浏览
3

我正在尝试移植此代码:

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'是相同的 .

1 回答

  • 4

    我能够使用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仍处于试验阶段 .

相关问题