VB32ビット用のサンプルです。 このサンプルプログラムは、弊社Webサーバ資料ページ内(http://www.pervasive.co.jp/support/index_Ref.html) 「Microsoft Visual Basic とPervasive.SQL 2000iを使ったアプリケーションの開発」からの抜粋です。 このサンプルで使用しているBtrieveファイルのレイアウトは次の通りです。 [レコードレイアウト] 内容 データ型 バイト数 ------------------------------ メーカID string 1 マシンID integer 2 マシンNo. long 4 マシン名 string 30 定価 long 4 割引率 float 4 [キーの構成] キー番号 セグメント番号 キーを構成するフィールド 備考 ----------------------------------- 0 1 メーカID 重複可能 0 2 マシンID 重複可能 [注意事項] ・Btrieveの引数にはString型の項目は渡さないでください。(ユーザ定義の中にも指定しないでください。) 文字が化けたり、保護違反が発生する事があります。 このサンプルでは、Byte型を使用したユーザ定義型とString型を使用したユーザ定義型を使用し、Btrieveに 渡す時とVBで作業する時で使い分けています。 ・VBの32ビット版では、16ビット版と比べユーザ定義型の中でInteger型、Long型等を使用したときの アライメント(メモリー上に記憶されるときの並び方)が変更になっています。このため、ユーザ定義型の 中のInteger型、Long型等はそれぞれByte型の2バイトの配列、Byte型の4バイトの配列で使用しています。 VBで作業するためには、Windows APIのRtlMoveMemoryを使用して、データをコピーします。 例)次のようなユーザ定義型を作成すると、16BitのVisual Basicと32BitのVisual Vasicでは、下記のような メモリ配置となり、データがずれます。(サイズが同じにはなりません。) Type TEMP B1 As Byte B2 As Byte B3 As Byte L1 As Long End Type Global Buf As Temp Visual Vasic 16Bit版のメモリ配置 0 1 2 3 4 5 6 7 ┌──┬──┬──┬──┬──┬──┬──┐ │ B1 │ B2 │ B3 │ : L1 : │ │Byte│Byte│Byte│ L : o : n : g │ │ 型 │ 型 │ 型 │ : 型 : │ └──┴──┴──┴──┴──┴──┴──┘ Visual Vasic 32Bit版のメモリ配置 0 1 2 3 4 5 6 7 8 ┌──┬──┬──┬──┬──┬──┬──┬──┐ │ B1 │ B2 │ B3 │ │ : L1 : │ │Byte│Byte│Byte│遊び│ L : o : n : g │ │ 型 │ 型 │ 型 │Byte│ : 型 : │ └──┴──┴──┴──┴──┴──┴──┴──┘ ・UniCodeからAnsiCodeへコード変換した後の文字列の長さ(バイト数)を求めるには、 長さ = LenB(StrConv(String型の変数, vbFromUnicode)) としてください。変換前の変数、変換後の変数に対してLenBを実行しても、正しい長さは得られません。 (保護違反が発生する原因となります。)