gpt4 book ai didi

crystal-lang - 如何在 C 绑定(bind)中拥有数组类型?

转载 作者:行者123 更新时间:2023-12-04 04:01:32 26 4
gpt4 key购买 nike

我正在尝试移植这段代码:

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

但我不知道如何定义 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 仍处于实验阶段。

关于crystal-lang - 如何在 C 绑定(bind)中拥有数组类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45900199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com