はじめに FFIで環境依存で変化する構造体に対処することは難しい。Win, Mac, Linuxなど大雑把に場合分けすることも考えられるが、ここでは別の方法として、sizeof(piyo) の結果を定数に保存する小さなC拡張を作成することを考える。 カレンダー日時を保存するtm構造体 ここでは、例として、日時を保存するtm構造体を扱う。tm構造体は、time.h をincludeすると使うことができる。 Rubyでは、ffiを扱うライブラリはfiddleとFFI(Ruby-FFI)の2種類があるが、下記はFiddleを使った例である。 TM = struct [ 'int tm_sec', 'int tm_min', 'int tm_hour', 'int tm_mday', 'int tm_mon', 'int tm_year', 'int tm_wday', 'int tm_yday'