LuaJIT-tcc:例題から学習

2017-05-13 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-05-12)の記事「luajit-tcc:Tiny C Compiler ・・・」で書いた、
同梱例題を基に、本格的(?)な学習を行った。

(1)例題の「base.lua」同様に、インラインCコードで関数を定義し、
  その場でそれを使う、GSL Shell プログラム:
  (追加でのファイル出力は無し)
-------- use_inline_C.gsl -----
tcc = require'tcc' ('libtcc')
TCL = tcc.new()
TCL:set_output_type( 'output_memory' )

-- ===== Cコード ==========
TCL:compile_string [[
int Add( int x, int y ){
return x + y;
}
]]
TCL:relocate( 'relocate_auto' )
Add = TCL:get_symbol( 'Add', 'int(*)( int, int )' )

-- ===== GSL Shell コード =======
z = Add( 2, 5 ); print( z )

-- ===== 後処理 =====
TCL:delete()
_=io.read(1)
で、実行は、
「use_inline_C.gsl」ファイルのダブルクリックで可。


(2)例題の「compile_exe.lua」を流用して、
  DLL ファイル( 'k_lib.dll' )を作るもの:
-------- make_dll.gsl -----
tcc = require'tcc' ('libtcc')
TCL = tcc.new()
TCL:set_output_type( 'output_dll' )

-- ===== Cコード =======
C_PG = [[
#include <windows.h>
#define DLLExport __declspec ( dllexport )
DLLExport int Add( int x, int y ){
return x + y;
}
]]
TCL:compile_string( C_PG )
TCL:output_file( 'k_lib.dll' )
TCL:delete()

-----------------------------
-- ===== 以下はテスト用 =====
klib = ffi.load( 'k_lib' )
ffi.cdef[[ int Add( int x, int y ); ]]

z = klib.Add( 2, 5 ); print( z )
_=io.read(1)
で、実行は、
「make_dll.gsl」ファイルのダブルクリックで可。
この時、同時に「k_lib.def」ファイルも出来る。


(3)例題の「add_symbol.lua」を流用して、
  DLL ファイル(例えば上記の'k_lib.dll')を使う Cコードの例:
-------- use_dll_inline_C.gsl ---
tcc = require'tcc' ('libtcc')
TCL = tcc.new()
TCL:set_output_type( 'output_memory' )
TCL:add_file( 'k_lib.def' ) -- DLL 情報

-- ===== Cコード ========
TCL:compile_string [[
int Add( int, int ); // DLL 内 関数プロトタイプ

int L_Add( int x, int y ){
return Add( x, y );
}
]]
TCL:relocate( 'relocate_auto' )
L_Add = TCL:get_symbol( 'L_Add', 'int(*)( int, int )' )

-- ===== GSL Shell コード =======
z = LAdd( 2, 5 ); print( z )

-- ===== 後処理 ==========
TCL:delete()
_=io.read(1)
で、実行は、
「use_dll_inline_C.gsl」ファイルのダブルクリックで可。
但し、'k_lib.def'、'k_lib.dll'も一緒に置いておく。


本日はここまで。


luajit-tcc 学習は続く。


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


170402,03
関連記事
スポンサーサイト

コメントの投稿

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

おきてがみ/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
ブックマーク