js-ctypes 学習:LuaPy 使用

2017-03-13 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-03-12)の記事「・・・文字列データの変換とファイル入出力」に続いて、
SpiderMonkey ( JavaScript/js-ctypes ) の学習継続。

先日(2017-03-11)の記事「SpiderMonkey/js-ctypes 学習」で、
自作の(機能的にはショボイものだが)test_dll.dllを使うことが出来た。

それでは、
かなりまともな(?)ものではどうか?

昨年7月(2016-07-04)の記事「LuaPy.dll 改訂」で書いた、
LuaPy_1.dll を使うことに挑戦。

出来たなら JavaScript から Python を利用できる。

やってみた。

つまりは、test_LuaPy_1.gsl の移植:
(“LuaPy_1.dll”は勿論の事“Sub_LuaPy_1.py”も当然必要)
// ===== test_LuaPy_1.js =====
var libL = ctypes.open( 'LuaPy_1' );

// int PyIni( char* ); // Pyファイル名
var PyIni = libL.declare( 'PyIni', ctypes.winapi_abi, ctypes.int32_t,
ctypes.char.ptr );

// int PyFun( char*, int, void* ); // 関数名、Stage、領域
var PyFun = libL.declare( 'PyFun', ctypes.winapi_abi, ctypes.int32_t,
ctypes.char.ptr, ctypes.int32_t, ctypes.int32_t.ptr );

// int PyFin( ); // Pyファイナライズ
var PyFin = libL.declare( 'PyFin', ctypes.winapi_abi, ctypes.int32_t,
ctypes.int32_t ); // 要ダミー???

// ----- 以上、宣言部 -----

// p = ffi.new( 'int32_t[2]' )
var p = ctypes.int32_t.array(2)(); // 配列データの宣言


print( PyIni( 'Sub_LuaPy_1' ) ); // Python 初期化

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( 0 ) ); // Python ファイナライズ

libL.close();
var str = readline();
とした。

出来た!


ここで、学習したコト:

1.日本語コメントを含んでいる時、
   '.js' ファイルのコードが 'UTF-8' ではエラーとなる。
   いつでも、シフトJIS で行くべきダ。

2.関数呼び出し時、
   引数無しの方法が分からない?
   取り敢えず、ダミーで整数を指定した。


更に、決定版(?)
8月(2016-08-13)の記事「LuaPy 経由で使う汎用 Python サブ」で作った、
汎用の“Sub_LuaPy_Gen.py”を使う。

面倒なので、
当時の“test_Main_Sub_LuaPy_Gen.gsl”の移植じゃないもの:
// ===== test_LuaPy_Gen.js =====
var libL = ctypes.open( 'LuaPy_1' );

var PyIni = libL.declare( 'PyIni', ctypes.winapi_abi, ctypes.int32_t,
ctypes.char.ptr );

var PyFun = libL.declare( 'PyFun', ctypes.winapi_abi, ctypes.int32_t,
ctypes.char.ptr, ctypes.int32_t, ctypes.voidptr_t.ptr );
// ^^^^^^^^^^^^^^^^^^^^
var PyFin = libL.declare( 'PyFin', ctypes.winapi_abi, ctypes.int32_t,
ctypes.int32_t ); // 要ダミー

// ----- 以上、宣言部 -----

var IT = ctypes.voidptr_t.array(40)();

ret=PyIni( 'Sub_LuaPy_Gen' );

IT[0] = ctypes.char.array(5)('x=5;').address();
IT[1] = ctypes.char.array(11)('print x+2;').address();

ret = PyFun( 'Exec', 2, IT ); // ===== 関数指定で呼出
// x=5; print x+2; なので、 7 と表示される

ret=PyFin(0);
libL.close();
var str = readline();
となった。

本日学習したコト(続):

3.“PyFun”関数の第3引数:
   voidは JavaScript の予約語なので、voidptr_tで、
   ctypes.voidptr_t.ptrとなる。

4.配列先頭アドレス:
   hoge配列.address() で hoge配列の先頭アドレスとなる。


本日はここまで。


SpiderMonkey ( JavaScript/js-ctypes ) 学習は続く。


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


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

コメントの投稿

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

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



おきてがみ

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