Lua から Python 関数の呼出し出来た

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

さて、本文。

前(2016-05-18)の記事「Lua から Python 関数を呼出す?
の後、学習した。

取り敢えず、プログラム/ファイル名は適当に付けて、
以下の仕様で作ってみた。


Luaプログラム「call_II.gsl」から、
C言語で作った「II.dll」内の「III」関数を経由して、
Pythonプログラム「py_func2.py」内の「mul」関数を呼び出す。


1段目の引数は、整数型が2つで、戻り値も整数型。


dll 内では、呼び出す Python モジュール名も関数名も固定。
ここでの引数も、1段目と同等。


最初に、目的の Python 関数:
'''py_func2.py'''
def mul( x, y ):
c = x*y
print 'The result of', x, '*', y, '=', c
return c
橋渡しライブラリは、
/****** II.c ---> II.dll ******/
#include
#define DLLExport __declspec ( dllexport )
DLLExport int III( int x, int y ){
PyObject *pName, *pModule, *pDict, *pFunc, *pArgs, *pValue;
Py_Initialize();

pName = PyString_FromString( "py_func2" ); // 固定名
pModule = PyImport_Import(pName); // Load the module object

pDict = PyModule_GetDict(pModule);
pFunc = PyDict_GetItemString(pDict, "mul" ); // 固定名

pArgs = PyTuple_New(2); // 引数2つ
pValue=PyInt_FromLong(x); PyTuple_SetItem( pArgs, 0, pValue );
pValue=PyInt_FromLong(y); PyTuple_SetItem( pArgs, 1, pValue );
pValue = PyObject_CallObject( pFunc, pArgs );
Py_DECREF(pArgs);
printf("Return of call : %d\n", PyInt_AsLong(pValue));
Py_DECREF(pValue);

Py_DECREF(pModule);
Py_DECREF(pName);
Py_Finalize();
return x+y;
}
これを、
  cl /LD /FeII.dll II.c User32.lib
でコンパイル。

最後に、メインプログラム:
-- call_II.gsl
k_lib = ffi.load('II') -- dll 読み込み
ffi.cdef[[
int III( int, int );
]]
print( k_lib.III(10, 5) )
以上の3本で、
整数型引数を2つ渡し、整数型戻り値を受け取る、
モジュール名/関数名 固定のものが出来た。

そこで、コマンド実行:call_II.gsl
デバッグ用にあちこち入れた print 文が実行されている。


更なる 学習だ。


本日はここまで。


Lua ( GSL Shell ) 学習は続く。


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


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

コメントの投稿

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

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



おきてがみ

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