新しく発言する  EXIT  インデックスへ

構造体、レコード型でのバイナリファイルへ...


  構造体、レコード型でのバイナリファイルへのアクセス 山中和義 2008/02/29 20:42:14  (修正1回)
  つづき 山中和義 2008/02/29 20:42:55  (修正1回)
   └つづき(構造体、レコード型サポート関連) 山中和義 2008/02/29 20:44:04  (修正2回)
    └つづき(構造体定義部分) 山中和義 2008/02/29 20:46:12  (修正1回)
     └つづき 山中和義 2008/02/29 20:49:03  (修正1回)
      ├ネストする構造体の場合(親子関係) 山中和義 2008/03/03 13:19:43  (修正2回)
      └SUBStructDefの構造 山中和義 2008/03/04 10:48:06  (修正1回)
Re: つづき  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/03/04 10:48:06 ** この記事は1回修正されてます
SUB StructDef の構造

VisualBasic文法の構造体定義を機械的にコンバートする。
また、アライメントを考慮する場合は展開する必要があります。



EXTERNAL SUB StructDef(s$,m$, ofst,sz) !メンバ変数の位置と大きさを得るために構造体を定義する
!!!DEF align(x,s)=(INT((x-1)/s)+1)*s !<----- アライメント ※sバイト境界

IF m$<>"" THEN PRINT s$;".";m$;" ="; !※

LET mm$=UCASE$(m$)
SELECT CASE UCASE$(s$)

CASE "構造体1" !Type 構造体1 ※構造体単位に

!Type 構造体1
! 変数1 As データ型1
! 変数2 As データ型2
!  :
!  :
! 変数N As データ型N
!End Type

 LET ofst=0

 LET sz=SizeOf("データ型1","") !変数1 As データ型1 ※変数単位に
 IF mm$=UCASE$("変数1") THEN EXIT SUB
 LET ofst=ofst+sz

 LET sz=SizeOf("データ型2","") !変数2 As データ型2
 !!!LET ofst=align(ofst,sz) !<----- szバイト領域 ※各メンバ変数に対して
 IF mm$=UCASE$("変数2") THEN EXIT SUB
 LET ofst=ofst+sz

  :
  :

 LET sz=SizeOf("データ型N","") !変数N As データ型N
 IF mm$=UCASE$("変数N") THEN EXIT SUB
 LET ofst=ofst+sz

 !!!LET ofst=align(ofst,4) !<----- 4バイト領域 ※構造体全体に対して


 IF m$<>"" THEN !End Type
 PRINT m$;" は ";s$;" のメンバ変数ではありません。"
 STOP
 END IF


CASE "構造体2" !※他にあれば同様に続ける

  :
  :



CASE ELSE
 PRINT s$;" は未定義なデータ型です。"
 STOP
END SELECT
END SUB

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。