Python:call_Lua51 似非モジュール

2017-04-24 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
先日(2017-04-19)の記事「SpiderMonkey:call_Lua51 似非モジュール」では、
その前(2017-04-17)の記事「call_Lua 似非モジュール:Lua51 汎用・決定版」を、
SpiderMonkey”に移植してみた。

今回は、同様に“Python”で作ってみた。


なんとか出来ました:
# -*- coding: utf-8 -*-
# ----- call_Lua51_Gen.py -----
import sys
import numpy as np
import ctypes as ct
lua = ct.CDLL( 'lua51' )

# ----- int32_t 配列6要素、値格納
IT = np.array( [1,2,3,4,5,0], dtype=ct.c_int );
# ----- double 5要素
DT = np.array( [1.1, 2.2, 3.3, 4.4, 5.5], dtype=ct.c_double );

IT[5]= ct.cast( id(DT), ct.POINTER(ct.c_int) ) [2]
ST=''' print("Lua5.1---")
ffi.cdef[[ double sqrt(double); ]]
print( ffi.C.sqrt(3.0) )
print( math.sin(1.0) )
require"lfs"; print( lfs.currentdir() )
t=require"time"; print(t.time())
print(IT[2])
DT=DblA(IT[5]); print(DT[3])
IT[0]=999; SV="ok!"
'''

L = lua.luaL_newstate()
lua.luaL_openlibs(L)
z = lua.luaL_loadfilex(L, 'Lua51_Gen.lua', 0)
z = lua.lua_pcall(L, 0, 0, 0 ) # -- script を1度実行

lua.lua_getfield( L, -10002, 'Exec' ); # -- 呼び出す関数
lua.lua_pushinteger( L, IT.ctypes.data_as(ct.POINTER(ct.c_int)) );
lua.lua_pushstring( L, ct.c_char_p(ST) ); # -- 第2引数:Lua5.1 での実行文

if (lua.lua_pcall(L, 2, 1, 0) != 0): # -- 引数 2 個, 戻り値 1 個
print 'cannot exec.', L; # ----- 中で、実行
sys.exit()

if( lua.lua_isstring(L, -1)):
ToStr = lua.lua_tolstring
ToStr.restype = ct.c_char_p
SV = ToStr(L, -1, 0); # -- 戻り値
print( SV ); # -- 'OK'~

lua.lua_settop(L, -2); # -- lua_pop(L,1); 戻り値を pop
lua.lua_close(L)

print( IT[0] )
_=raw_input()
と云った感じ。
コーディング量は少ないかナ。

尚、このプログラムファイルのコードは 'UTF-8' です。

このプログラムと「Lua51_Gen.lua」の他に、
「lua51.dll」「lfs.dll」「time.lua」も一緒に置いておく。


出来た?


本日はここまで。


Lua ( GSL Shell ) 学習は続く。


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


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

コメントの投稿

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

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



おきてがみ

最新記事
カレンダー
05 | 2017/06 | 07
- - - - 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 -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

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

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


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

Google Analytics
ブックマーク