3

我有一个(有点过高)这些:

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_function 等效的 attach_const,如下所示:

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 到 deaturated_chartreuse 的所有内容......

4

1 回答 1

3

有,attach_variable就是你要找的。

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

引用FFI::Library文档以获取示例:

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
于 2013-06-01T10:11:16.337 回答