代码之家  ›  专栏  ›  技术社区  ›  Nils 'Linkpy' Reid

如何在C绑定中拥有数组类型?

  •  3
  • Nils 'Linkpy' Reid  · 技术社区  · 7 年前

    我正在尝试移植此代码:

    struct SoundIoChannelLayout {
        const char *name;
        int channel_count;
        enum SoundIoChannelId channels[SOUNDIO_MAX_CHANNELS];
    };
    

    但我不知道如何定义 channels

    1 回复  |  直到 7 年前
        1
  •  6
  •   Vitalii Elenhaupt    7 年前

    我可以使用 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
    

    注: