gpt4 book ai didi

ruby - 如何将 C 常量包装在 Ruby FFI 模块中?

转载 作者:数据小太阳 更新时间:2023-10-29 08:00:29 24 4
gpt4 key购买 nike

我有一个(有点过高的)数量:

extern TCODLIB_API const TCOD_color_t TCOD_red;
extern TCODLIB_API const TCOD_color_t TCOD_flame;
extern TCODLIB_API const TCOD_color_t TCOD_orange;
extern TCODLIB_API const TCOD_color_t TCOD_amber;
extern TCODLIB_API const TCOD_color_t TCOD_yellow;
extern TCODLIB_API const TCOD_color_t TCOD_lime;

我怎样才能很好地获取 Ruby 端的值?感觉应该有一个 attach_const 等同于 attach_function,如下使用:

module TCOD
extend FFI::Library
ffi_lib File.join(APP_ROOT, "libtcod-1.5.1/libtcod.so")
attach_function :color_RGB, 'TCOD_color_RGB', [:uchar, :uchar, :uchar], Color.val
end

如果可能的话,我宁愿不必重新定义从 lightest_sepia 到 desaturated_chartreuse 的所有内容......

最佳答案

有,attach_variable正是您要找的。

这适用于任何实际上是全局变量的东西(这看起来是你的情况)但如果常量只是#define 宏则不行。

引用 FFI::Library documentation例如:

module Bar
extend FFI::Library
ffi_lib 'my_lib'
attach_variable :c_myvar, :myvar, :long
end
# now callable via Bar.c_myvar

和:

module Bar
extend FFI::Library
ffi_lib 'my_lib'
attach_variable :myvar, :long
end
# now callable via Bar.myvar

关于ruby - 如何将 C 常量包装在 Ruby FFI 模块中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16866185/

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