人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

RubyでWin32APIを使用してDLLの関数を利用したいのですが、構造体のやりとりについて、pack,unpackの使い方がよくわからないので、易しく説明しているページを探しています。

●質問者: Rynan
●カテゴリ:コンピュータ
✍キーワード:DLL Ruby 構造 関数
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● hmom
●50ポイント

http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=pack%A5%...

packテンプレート文字列 - Rubyリファレンスマニュアル

sockaddr_in 構造体の例が下の方にあります。

◎質問者からの返答

具体的にはVBで言うところの以下の関数を使おうとしてるのですが、どうやってやったらよいかわかりません。

Type sockaddr_in

sin_family As Integer

sin_port As Integer

sin_addr As Long

sin_zero As String * 8

End Type

Type ncb_t

sin As sockaddr_in

so As Long

nPipe As Long

context As Long

cursor As Long

hmem As Long

log_flag As Integer

hlib As Long

fTread As Long

emp_attr_ptr As Long

emp_top_ptr As Long

End Type

’ サーバをオープンする

Public Declare Function qwm_open& Lib ”empnt32.dll” (ncb As ncb_t, ByVal host$, ByVal serv$, ByVal Login$, ByVal PASSWD$)

------------------------------------------------------

qwm_open(ncb ,host ,serv ,login ,passwd) As Integer

ncb As ncb_t

ByVal host As String

ByVal serv As String

ByVal login As String

ByVal passwd As String

----------------------------------------------


2 ● zizz_walla
●200ポイント

http://www4.big.or.jp/~rynan/wiki/wiki.cgi?page=Ruby%2FEMPRESS+S...

Ruby/EMPRESS SQL Client - 喫茶『かくれ家』

ncb_t は、構造体の中に構造体を持っています。

メモリ上では以下のように配置されます。

Type ncb_t

Type sockaddr_in

s sin_family As Integer

s sin_port As Integer

l sin_addr As Long

A8 sin_zero As String * 8

End Type

l so As Long

l nPipe As Long

l context As Long

l cursor As Long

l hmem As Long

s log_flag As Integer

l hlib As Long

l fTread As Long

l emp_attr_ptr As Long

l emp_top_ptr As Long

End Type

左側の sとかlとかAは、テンプレート文字です。

s は Integer、l は Long、A は String のテンプレート文字です。

これをunpackテンプレート文字列にするには上からつなげていきます。

”sslA8lllllsllll”

連続するテンプレート文字は、後に回数指定をつけて簡略化できますので

”s2lA8l5sl4”

になります。

packテンプレート文字列も同様に ”s2la8l5sl4” になります。

pack と unpack で A8 と a8 が違っています。

pack の場合は、8文字に満たない場合、¥0 にしたいためです。

◎質問者からの返答

どうも詳しい解説ありがとうございます。

実は既に試行錯誤して解決してました(^^;

質問を終了するのを忘れていました、申し訳ありません。

ちなみに、紹介して頂いたページも私のページです。

本当に、どうもありがとうございした。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ