http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=pack%A5%...
packテンプレート文字列 - Rubyリファレンスマニュアル
sockaddr_in 構造体の例が下の方にあります。
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 にしたいためです。
どうも詳しい解説ありがとうございます。
実は既に試行錯誤して解決してました(^^;
質問を終了するのを忘れていました、申し訳ありません。
ちなみに、紹介して頂いたページも私のページです。
本当に、どうもありがとうございした。
具体的には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
----------------------------------------------