SpiderMonkey/js-ctypes 学習

2017-03-11 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-03-10)の記事「SpiderMonkey 学習:js-ctypes 入門」に続いて、
SpiderMonkeyの“js-ctypes”学習。


3年前(2014-05-19)の記事「Relo2 + MinGW で“.dll”作成」で書いた、
MinGW で作った自作DLL“test_dll.dll”

このDLLファイルにある“Add”関数を呼び出すコードは?
/***** use_test_dll.js *****/
// ----- 宣言
var lib = ctypes.open( 'test_dll' ); // .dll は無くても可
var ADD = lib.declare( 'Add', ctypes.winapi_abi, ctypes.int32_t,
ctypes.int32_t, ctypes.int32_t );
// ----- 利用
var ret = ADD( 5, 3 );
print( ret ); // 8 と出た。

lib.close(); // -- 後処理

var str = readline(); // -- [Enter]キー入力待ち
これで行けた。

文字列定義のコーテーションマークは、どっちでもOKですネ。


次に、配列についての学習。
/***** test_Array.js *****/
var VecType = ctypes.ArrayType(ctypes.int32_t); // 配列型を定義

var T = new VecType(5); // それを利用して、5要素の配列を作る

for( var i=0;i<5;i++ ){ T[i]=10*i+i+1; } // 適当に値を設定

print( T[1] ) // 中身を確認
var str = readline();
配列の添字はゼロオリジンですネ。
序でに、名前文字列は、大文字・小文字の区別がある。


最後に、
前回の最後に書いた、

  少しはまともな?コード:
  ファイルのサイズ取得

に関して、更に学習した結果:

1.「parseInt」関数を使わなくても良かった。
2.「getfsz」関数の第2引数で値を受け取る方法が分かった。

結果のコード:
/***** ファイルのサイズ取得(改訂版) *****/
var libK = ctypes.open( 'kernel32' );
var CreateFile = libK.declare( 'CreateFileA', ctypes.winapi_abi, ctypes.int32_t,
ctypes.char.ptr, ctypes.uint32_t, ctypes.int32_t, ctypes.int32_t,
ctypes.int32_t, ctypes.int32_t, ctypes.int32_t );
var fp = CreateFile( 'zyx.txt', 0x80000000, 0, 0, 3, 0x80, 0 ); // 出力mode Open
print( fp ); // 確認。     16進数を定義できる。

/***** 第2引数の指定の仕方 *****/
// 値を受け取る引数の例:( 構造体方式 )
var V = new ctypes.StructType( 'tagV', [ { 'atai': ctypes.int32_t } ] );
var v = V();
var getfsz = libK.declare( 'GetFileSize', ctypes.winapi_abi, ctypes.int32_t,
ctypes.int32_t, V.ptr );
var ss = getfsz( fp, v.address() );
print( ss ); // ===== 下位 32bit 分
print( v.atai ); // ===== 上位 32bit 分

// 値を受け取る引数の例:( Documentに載っている方式 )
var v = ctypes.int32_t(1);
var getfsz = libK.declare( 'GetFileSize', ctypes.winapi_abi, ctypes.int32_t,
ctypes.int32_t, ctypes.int32_t.ptr );
var ss = getfsz( fp, v.address() );
print( ss ); // ===== 下位 32bit 分
print( v.value ); // ===== 上位 32bit 分

// 値を受け取る引数の例:( 配列を使う方式 )
var VecType = ctypes.ArrayType(ctypes.int32_t);
var v = new VecType(1);
var getfsz = libK.declare( 'GetFileSize', ctypes.winapi_abi, ctypes.int32_t,
ctypes.int32_t, ctypes.voidptr_t );
var ss = getfsz( fp, v.address() );
print( ss ); // ===== 下位 32bit 分
print( v[0] ); // ===== 上位 32bit 分

libK.close();
var str = readline();
以上2件(2番目は3つの方式)


本日はここまで。


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


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


170210
スポンサーサイト
おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
02 | 2017/03 | 04
- - - 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
ブックマーク