Lua 学習:FFI・cdata

2016-01-24 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での blogramのランクインカテゴリは、
6、3、0、0、1、 0、0、0、0、0(40)で、換算ポイント 86pt 。
「化学業界」「硝子業界」「e-radio」「グルコサミン」、
「FM COCOLO」「Firefox」bg値変動のみ。
「Perl」「C言語」「Python」「FM青森」全く変化無し。
・-・ - -・

さて、本文。

先日(2016-01-12)の記事:「Lua 学習:FFI Library
以降、
Extensions - LuaJIT」以下のページで、
C言語インタフェースを学習した。


ffi.* API Functions」ページに、
  ・・・・・
  ・・・・・
  Creating cdata Objects
  The following API functions create cdata objects
   (type() returns "cdata").
  All created cdata objects are garbage collected.
  cdata = ffi.new(ct [,nelem] [,init...])
  cdata = ctype([nelem,] [init...])
  ・・・・・
  ・・・・・
などとあり、

FFI Semantics」ページに、
  ・・・・・
  ・・・・・
  C Type Conversion Rules
  Conversions from C types to Lua objects
  These conversion rules apply for
   read accesses to C types: indexing pointers,
   arrays or struct/union types;
   reading external variables or constant values;
   retrieving return values from C calls:
  ・・・・・
  ・・・・・
などとある。


それで、<紙>流に纏めた。


“C 型”変数の宣言:“ffi.new( )”
配列の例だが、スカラでも可。
初期値指定は省略可。
local ffi=require'ffi'
local v = ffi.new( 'int32_t[2]', { 1, 2 } )
v[1] = v[0]*3 -- 添字のオリジンに注意
print( v[1] )
表示結果は、3


配列のサイズを変数で指定:
k=5
local ffi=require'ffi'
local v = ffi.new( 'double[?]', k )
v[k-1] = 3
print( v[k-1] )
表示結果は、3


バイトデータを Lua 文字列に変換:“ffi.string( )”
長さ指定無しの場合:ヌルターミネート
local ffi=require'ffi'
local v = ffi.new( 'int8_t[2]', {1, 2} )
local s = ffi.string( v )
print( #s )
表示結果は、2
なお、type(s) は、“string”で、“char*”

長さを指定すると:全てのコードが可
local ffi=require'ffi'
local v = ffi.new( 'int16_t[2]', {1, 2} )
local s = ffi.string( v, 4 )
print( string.byte(s,1), string.byte(s,2) )
表示結果は、1 0
なお、type(s) は、“string”だが、“void*”


本日はここまで。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


151225
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
04 | 2017/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク