LuaPy_gsl:GSL Shell による LuaPy.dll 相当品

2017-02-13 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
以前(2016-07-04)の記事「LuaPy.dll 改訂」では、
  ・・・・・
  ・・・・・
  先々月(2016-05-26)の記事「LuaPy.dll 作成
  で書いた、初版“LuaPy”即ち“LuaPy_0.dll”を機能拡張し、
  “LuaPy_1.dll”を作った。
  ・・・・・
  ・・・・・
と書いている。

この“LuaPy_1.dll”は、C言語で作っていたが、
相当品を GSL Shell で作れないか?
といろいろ学習した。


結果、
python.exeのある場所:
<紙>の場合は、D:/TOOL/WinPython32_2763/python-2.7.6/
ここにある python27.lib を使えば出来そうダ。


そこで、
上記 2016-07-04 の記事で書いた
“Sub_LuaPy_1.py”を使う“test_LuaPy_1.gsl”に相当するコードを、

“LuaPy_1.dll”を使わずに書いてみた。
(と云っても、代わりに“python27.lib”を使うことになるが)

----- tst_LuaPy_gsl.gsl : test_LuaPy_1.gsl 相当
-------------------------------------------------
charA = |x| ffi.cast( 'char*', x )
Int = |x| ffi.cast( 'int32_t', x )

Py = ffi.load('python27') -- 'python27.lib' を持ってくる
ffi.cdef[[
void Py_Initialize( void );
void* PyString_FromString( char* );
void* PyImport_Import( void* );
void* PyModule_GetDict( void* );
void* PyDict_GetItemString( void*, char* );
void* PyTuple_New( int );
void* PyInt_FromLong( int );
void PyTuple_SetItem( void*, int, void* );
void* PyObject_CallObject( void*, void* );
int PyInt_AsLong( void* );
void Py_Finalize( void );
]]
function PyIni( m ) -- int PyIni( char* m )
Py.Py_Initialize()
pName = Py.PyString_FromString( charA(m) )
pModule = Py.PyImport_Import( pName )
pDict = Py.PyModule_GetDict( pModule )
return 0;
end
function PyFun( f, s, p ) -- int PyFun( char* f, int s, void* p )
pFunc = Py.PyDict_GetItemString( pDict, charA(f) )
pArgs = Py.PyTuple_New( 2 )
pValue = Py.PyInt_FromLong( s )
Py.PyTuple_SetItem( pArgs, 0, pValue )
pValue = Py.PyInt_FromLong( Int(p) )
Py.PyTuple_SetItem( pArgs, 1, pValue )
pValue = Py.PyObject_CallObject( pFunc, pArgs )
return Py.PyInt_AsLong( pValue )
end
function PyFin( ) -- int PyFin( )
-- Py.Py_DECREF( pArgs ) -- Py_DECREF はマクロ!使えない。
-- Py.Py_DECREF( pValue ) -- 無くてもイイのかな?
-- Py.Py_DECREF( pDict )
-- Py.Py_DECREF( pModule )
-- Py.Py_DECREF( pName )
Py.Py_Finalize()
return 0;
end
-------------------------------------------------
p = ffi.new( 'int32_t[2]' )

print( PyIni( 'Sub_LuaPy_1' ) )

p[0]=5
print( PyFun( 'fun', 0, p ) )
print( PyFun( 'fun', 1, p ) )

p[0]=20
print( PyFun( 'fun2', 0, p ) )
print( PyFun( 'fun2', 1, p ) )

print( PyFin() )
こんな感じになった。

実行出来た。

この方式だと、
Cコンパイルの必要が無い!!!


本日はここまで。


LuaPy_gsl 学習は続く。


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


170121,26
関連記事
スポンサーサイト

コメントの投稿

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

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



おきてがみ

最新記事
カレンダー
08 | 2017/09 | 10
- - - - - 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
ブックマーク