如何在Ruby FFI模块中封装C常量?

如何在Ruby FFI模块中封装C常量?,ruby,ffi,Ruby,Ffi,我有一个(有点过高的)数字: 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_

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

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_函数,如下所示:

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

如果可能的话,我不想重新定义任何东西,从最轻的乌黑到去饱和的黄绿色……

有,
attach\u variable
就是你要找的

这将适用于任何实际为全局变量(看起来是您的情况)的情况,但如果常量只是#define宏,则不适用

引用以下例子:

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


遗憾的是,对于#定义常量也没有解决方案,但这有助于:D@Mispy:有一个
#定义
常量的解决方案;请参见
FFI::ConstGenerator
@stopanko问题进入问题,而不是评论。
module Bar
  extend FFI::Library
  ffi_lib 'my_lib'
  attach_variable :myvar, :long
end
# now callable via Bar.myvar