開発者リファレンス : プログラミング方法の概要 : Zen Programmer’s Guide : 言語インターフェイス モジュール
  
このページをシェアする                  
言語インターフェイス モジュール
この章では、Zen SDK インストール オプションに用意されている言語インターフェイス ソース モジュールを示します。
各言語インターフェイス用のソース コードを提供しています。追加情報は、ソース モジュール自体にあります。
Actian Web サイトの開発者向けオンライン リソースをご覧いただくと、さまざまな言語インターフェイス用の記事やサンプル コードが盛り込まれています。
特定のインターフェイス モジュールの詳細については、以下をお読みください。
インターフェイス モジュールの概要
C/C++
Delphi
DOS(Btrieve)
Pascal
Visual Basic
インターフェイス モジュールの概要
プログラミング言語にインターフェイスがない場合は、コンパイラが複数の言語からの呼び出しが混在した状態をサポートするかどうかを確認してください。そうであれば、C インターフェイスを使用できる場合があります。
表 23 Btrieve 言語インターフェイス ソース モジュール
言語
コンパイラ
ソース モジュール
C/C++
Embarcadero、Microsoft、WATCOM などの大半の C/C++ コンパイラ。
このインターフェイスは、複数のプラットフォームをサポートします。
Embarcadero C++Builder
BlobHdr.h(Embarcadero または Phar Lap のみを使用する拡張 DOS プラットフォーム)
BtiTypes.h(プラットフォームに依存しないデータ型)
BtrApi.h(Btrieve 関数プロトタイプ)
BtrApi.c(すべてのプラットフォーム用の MicroKernel エンジン コード)
BtrConst.h(共通 Btrieve 定数)
BtrSamp.c(サンプル プログラム)
Btrvexid.h(エントリ ポイント宣言)
CBBtrv.cpp
CBBtrv.mak
CBBMain.cpp
CBBMain.dfm
CBBMain.h
Delphi
Embarcadero Delphi 1
Embarcadero Delphi 3 以降
BtrConst.pas(共通 Btrieve 定数)
Btr32.dpr
Btr32.dof
BtrSam32.dfm
BtrSam32.pas(サンプル プログラム)
BtrApi32.pas
BtrConst.pas(共通 Btrieve 定数)
Pascal
Borland Turbo Pascal 5 – 6
Borland Pascal 7 for DOS
Extended DOS Pascal for Turbo Pascal 7
Borland Turbo Pascal 1.5
Borland Pascal 7 for Windows
BtrApid.pas
BtrSampd.pas(サンプル プログラム)
BtrConst.pas(共通 Btrieve 定数)
BlobHdr.pas
BtrApiw.pas
BtrSampw.pas(サンプル プログラム)
Visual Basic
Microsoft Visual Basic for Windows NT 以降 / Windows 98/ME
BtSamp32.vbp
BtrSam32.bas(サンプル プログラム)
BtrFrm32.frm
以下の表に、Create や Stat などの Btrieve オペレーション用データ バッファーで使用されるいくつかの共通データ型の比較を示します。
表 24 Btrieve データ バッファーで使用される共通データ型
Assembly
C
COBOL
Delphi
Pascal
Visual Basic
quadword
long long1
doubleword
long1
PIC 9(4)
longint1
longint1
Long Integer
word
short int1
PIC 9(2)
smallint1
integer1
Integer
Byte
char
PIC X
char
char
String
Byte
Unsigned char
PIC X
Byte
Byte
Byte
1 整数値は、開発する環境により異なります。32 ビット環境では、整数は Long Integer と同じです。16 ビット環境では、整数は short int または small int と同じです。
プログラミングの注意事項
Btrieve 関数を呼び出すと、常に、ステータス コードに対応する INTEGER 値が返されます。Btrieve 呼び出しの後、アプリケーションは常にこのステータス コードの値を確認します。ステータス コード 0 は、正常終了したオペレーションを示します。アプリケーションは、非ゼロのステータスを認識し、解決できなければなりません。
どの呼び出しでもすべてのパラメーターを提供する必要がありますが、MicroKernel はすべてのオペレーションにすべてのパラメーターを使用するわけではありません。各オペレーションに関連するパラメーターの詳細説明については、『Btrieve API Guide』を参照してください。
C/C++
ここでは、Btrieve API の C/C++ モジュール情報を示します。
C/C++ インターフェイスは、プラットフォームに依存しないアプリケーションの作成を容易にします。このインターフェイスは、DOS、Windows、Linux、および macOS における開発をサポートします。これらのモジュールについては、表 23 でも説明しています。
インターフェイス モジュール
ここでは、C 言語インターフェイスを構成するモジュールについて詳述します。
BTRAPI.C
BTRAPI.C ファイルは、C アプリケーション インターフェイスの実際の実装です。BTRV および BTRVID を呼び出すすべてのアプリケーションをサポートします。これらの関数のいずれかで Btrieve 呼び出しを行う場合、BTRAPI.C をコンパイルし、そのオブジェクトをアプリケーションの他のモジュールとリンクします。
BTRAPI.C ファイルには、BTRAPI.H、BTRCONST.H、BLOBHDR.H、および BTITYPES.H を取り込むようにコンパイラに指示する #include ディレクティブが含まれています。これらのファイルを取り込むことによって、BTRAPI.C は、インターフェイスに関連するプラットフォーム独立性を備えたデータ型を利用します。
BTRAPI.H
BTRAPI.H ファイルには、Btrieve 関数のプロトタイプが含まれています。プロトタイプ定義では、BTITYPES.H ファイルで定義されているプラットフォーム非依存のデータ型を使用します。BTRAPI.H は、BTRV 関数と BTRVID 関数を呼び出すすべてのアプリケーションをサポートします。
BTRVEXID.H
このファイルには、BTRVEX および BTRVEXID の Btrieve エントリ ポイント関数の宣言が含まれています。
BTRCONST.H
BTRCONST.H ファイルには、Btrieve 固有の有効な定数が含まれています。これらの定数を使用すると、Btrieve オペレーション コード、ステータス コード、ファイル仕様フラグ、キー仕様フラグなどの多数の項目への参照を容易に標準化できます。
BTRCONST.H を利用しなくても C アプリケーション インターフェイスを使用することはできますが、このファイルを取り込むと、プログラミング作業を単純化できます。
BTITYPES.H
BTITYPES.H ファイルは、プラットフォーム非依存のデータ型を定義します。Btrieve 関数呼び出しで BTITYPES.H のデータ型を使用すると、アプリケーションはオペレーティング システム間で移植されます。
BTITYPES.H には、アプリケーションが動作するオペレーティング システムを示すために使用しなければならないスイッチも記載されています。表 25 はこれらのオペレーティング システムのスイッチの一覧を示したものです。
表 25 Btrieve API オペレーティング システム スイッチ
オペレーティング システム
アプリケーションの種類
スイッチ
DOS
16 ビット

Tenberry Extender と BStub.exe では 32 ビット

Phar Lap 6 を使用した 32 ビット

Embarcadero PowerPack を使用した 32 ビット
BTI_DOS

BTI_DOS_32R

BTI_DOS_32P

BTI_DOS_32B
Linux
32 ビット
BTI_LINUX
Linux
64 ビット
BTI_LINUX_64
macOS
64 ビット
BTI_MACOSX_64
Win32
32 ビット Windows
BTI_WIN_32
Win64
64 ビット Windows
BTI_WIN_64
BTRSAMP.C
BTRSAMP.C ソース ファイルは、表 25 に記載されているオペレーティング システムでコンパイル、リンク、および実行できるサンプル Btrieve プログラムです。
プログラミングの必要条件
C アプリケーション インターフェイスを使用し、アプリケーションをプラットフォーム非依存にする場合は、BTITYPES.H に記載されているデータ型を使用する必要があります。これらのデータ型の使用方法については、BTRSAMP.C ファイルを参照してください。
メモ:また、プログラムが動作するオペレーティング システムを識別するディレクティブを指定する必要があります。ディレクティブに使用できる値は、ヘッダー ファイル BTITYPES.H に列挙されています。お使いのコンパイラに適したコマンド ライン オプションを使用して、ディレクティブを指定してください。
Delphi
Btrieve Delphi モジュールは、表 23 に記載されています。
DOS(Btrieve)
ここでは、DOS アプリケーションが Btrieve API をどのように使用できるかについて説明します。
インターフェイス モジュール
Btrieve API を使用する DOS アプリケーション向けの言語インターフェースは、以下のモジュールによって構成されます。
BTRAPI.C
BTRAPI.C ファイルは、C アプリケーション インターフェイスの実装です。また、このファイルには次のような DOS インターフェイスも含まれます。
#if defined( BTI_DOS )
BTI_API BTRVID(
BTI_WORD operation,
BTI_VOID_PTR posBlock,
BTI_VOID_PTR dataBuffer,
BTI_WORD_PTR dataLength,
BTI_VOID_PTR keyBuffer,
BTI_SINT keyNumber,
BTI_BUFFER_PTR clientID )
BTRAPI.C は、BTRV および BTRVID を呼び出すすべてのアプリケーションをサポートします。これらの関数のいずれかで Btrieve 呼び出しを行う場合、BTRAPI.C をコンパイルし、そのオブジェクトをアプリケーションの他のモジュールとリンクします。
BTRAPI.C ファイルには、BTRAPI.H、BTRCONST.H、BLOBHDR.H、および BTITYPES.H を取り込むようにコンパイラに指示する #include ディレクティブが含まれています。これらのファイルを取り込むことによって、BTRAPI.C は、インターフェイスに関連するプラットフォーム独立性を備えたデータ型を利用します。
BTRAPI.H
BTRAPI.H ファイルには、Btrieve 関数のプロトタイプが含まれています。プロトタイプ定義では、BTITYPES.H ファイルで定義されているプラットフォーム非依存のデータ型を使用します。BTRAPI.H は、BTRV 関数と BTRVID 関数を呼び出すすべてのアプリケーションをサポートします。
BTRCONST.H
BTRCONST.H ファイルには、Btrieve 固有の有効な定数が含まれています。これらの定数を使用すると、Btrieve オペレーション コード、ステータス コード、ファイル仕様フラグ、キー仕様フラグなどの多数の項目への参照を容易に標準化できます。
BTRCONST.H を利用しなくても C アプリケーション インターフェイスを使用することはできますが、このファイルを取り込むと、プログラミング作業を単純化できます。
BTITYPES.H
BTITYPES.H ファイルは、プラットフォーム非依存のデータ型を定義します。Btrieve 関数呼び出しで BTITYPES.H のデータ型を使用すると、アプリケーションはオペレーティング システム間で移植されます。
BTITYPES.H には、アプリケーションが動作する DOS オペレーティング システムを示すために使用しなければならないスイッチも記載されています。次の表は、これらのスイッチの一覧を示します。
表 26 DOS アプリケーション用の Btrieve API オペレーティング システム スイッチ
オペレーティング システム
アプリケーションの種類
スイッチ
DOS
16 ビット

Tenberry Extender および BStub.exe を使用した 32 ビット1

Phar Lap 6 を使用した 32 ビット

Embarcadero PowerPack を使用した 32 ビット
BTI_DOS

BTI_DOS_32R

BTI_DOS_32P

BTI_DOS_32B
Pascal
ここでは、Btrieve API の Pascal ソース モジュールについて説明します。
その後に、Pascal の Btrieve API ソース モジュールについて説明します。
ソース モジュール
Pascal インターフェイスは、以下のソース モジュールから構成されています。
BTRAPID.PAS-DOS 用 Btrieve 関数インターフェイス ユニット
BTRCONST.PAS-共通 Btrieve 定数ユニット
BTRSAMPD.PAS-DOS 用サンプル Btrieve プログラム
BBTRAPID.PAS
BTRAPID.PAS には、DOS 用の Pascal アプリケーション インターフェイスのソース コードの実装が含まれています。このファイルは、Btrieve 関数を呼び出すアプリケーションをサポートします。
Turbo Pascal が、MicroKernel エンジンを正しくコンパイルして、アプリケーションの他のモジュールとリンクするためには、BTRAPID.PAS をコンパイルして Turbo Pascal ユニットを作成し、そのユニットをアプリケーションのソース コードの uses 句に記載します。
BTRCONST.PAS
BTRCONST.PAS ファイルには、Btrieve に固有な有効の定数が含まれています。これらの定数を使用すると、Btrieve オペレーション コード、ステータス コード、ファイル仕様フラグ、キー仕様フラグなどの多数の項目への参照を容易に標準化できます。
BTRCONST.PAS を使用するには、このファイルをコンパイルして Turbo Pascal ユニットを作成し、そのユニットをアプリケーションのソース コードの uses 句に記載します。
BTRCONST.PAS を利用しなくても Pascal アプリケーション インターフェイスを使用することはできますが、このファイルを利用すると、プログラミング作業を単純化できます。
BTRSAMPD.PAS
BTRSAMPD.PAS ソース ファイルは、コンパイル、リンク、および実行できるサンプル Btrieve プログラムです。
メモ:アプリケーションがバリアント文字列を含む Pascal レコード構造を使用する場合は、たとえレコードがパック化されていなくても、Pascal レコード内の奇数長の要素が追加の記憶バイトを必要とする場合があります。このことは、Create(14)オペレーションのレコード長を定義する場合に考慮が必要な重要問題です。レコード タイプの詳細については、Pascal リファレンス マニュアルを参照してください。
Visual Basic
ここでは、Btrieve API の Visual Basic ソース モジュールについて説明します。
Visual Basic は 32 ビット アプリケーションをコンパイルする際、UDT(ユーザー定義データ型)のメンバーをそれぞれ、その特定のメンバーのサイズに応じて 8 ビット、16 ビット、32 ビットの境界に配置します。構造体と違い、データベース行はパック化されます。つまり、フィールド間に未使用スペースがないということです。配置をオフにする方法はないので、Visual Basic アプリケーションがデータベースにアクセスできるように構造体をパック化およびアンパック化する方法が必要です。Zen Btrieve アライメント DLL、つまり PALN32.DLL は、この配列の問題を処理するように設計されています。
Visual Basic の場合、この言語はさまざまなビットの倍数で要素を配置します。以下の表に、各種データ型と、Visual Basic がそれらのデータ型を処理する方法を示します。
Visual Basic データ型
データ型定数
一般的なサイズ(バイト単位)
境界
Byte
FLD_BYTE
すべて
1 バイト(なし)
String
FLD_STRING
すべて
1 バイト(なし)
Boolean
FLD_LOGICAL
2
2 バイト
Integer
FLD_INTEGER
2
2 バイト
Currency
FLD_MONEY
4
4 バイト
Long
FLD_INTEGER
4
4 バイト
Single
FLD_IEEE
4
4 バイト
Double
FLD_IEEE
8
4 バイト
プログラムは、BTRCALL 関数を呼び出して Visual Basic 内の Btrieve 呼び出しにアクセスします。この関数へのアクセスは、プロジェクトに BTRAPI.BAS モジュールを取り込むことによって行います。必要な関数の残りの部分は、PALN32.DLL 内にあります。
プロジェクトに PALN32.DLL を取り込むには
プロジェクト]>[参照設定]を選択し、Zen Btrieve Alignment Library モジュールを確認します。このモジュールが表示されない場合は、まず、参照ボタンを選択してファイルを検索することによってリストにモジュールを追加します。
以下の表に、各関数とその関数が必要とする特定のモジュールを示します。
関数
用途
場所
パラメーター
戻り値
BTRCALL
Btrieve オペレーションを実行する
BTRAPI.BAS
OP As Integer
Btrieve API Guide』に記載されている Btrieve オペレーション番号。
Pb$ As String
レコードを取得または格納するため、または Btrieve に構造体を渡すために使用される文字列に、ポジション ブロックを格納します。
Db As Any
データ バッファー。このパラメーターは、レコードを取得または格納するため、または Btrieve に構造体を渡すために使用されます。
DL As Long
データ バッファーの長さ。
Kb As Any
キー バッファー。
Kl As Integer
キー バッファーの長さ。
Kn As Integer
キー番号。
Integer
オペレーションから返される Btrieve ステータス コード。特定のコードの詳細については、『Status Codes and Messages』を参照してください。
RowToStruct
バイトの行を Visual Base UDT に変換します。
PALN32.DLL
row (1 to n) As Byte
パック化されたデータを取得するための入力配列。
fld (1 to n) As FieldMap
個々のフィールドのデータ型を決定するために使用される FieldMap 配列。
udt As Any
データを格納するための UDT。
udtSize As Long
UDT のサイズ。LenB( ) を使用してこの値を生成します。
Integer
問題なければ 0 です。それ以外はエラーが発生しました。
SetFieldMap
FieldMap 要素のメンバーを設定します。
PALN32.DLL
map As FieldMap
FieldMap 配列の要素。
dataType As Integer
フィールドの型。次の定数を渡します。
- FLD_STRING
- FLD_INTEGER
- FLD_IEEE
- FLD_MONEY
- FLD_LOGICAL
- FLD_BYTE
- FLD_UNICODE1
size As Long
データベースに格納されているフィールドのサイズ(バイト単位)。
なし
SetFieldMapFromDDF
FieldMap 型の配列のすべてのメンバーを設定します。
PALN32.DLL
path As String
データ ソースへの絶対パス名。
table As String
テーブルの名前。
userName As String
予約済み。ヌル文字列("")を渡します。
passwd As String
予約済み。ヌル文字列("")を渡します。
map (1 to n) As FieldMap
フィールドを入れるための出力先 FieldMap 配列。レコードのフィールド数と同じ要素数が含まれている必要があります。
unicode As Integer
文字列が ASCII としてレコードに格納される場合は 0。それ以外は、Unicode として格納されます。
Integer
問題なければ 0 です。それ以外はエラーが発生しました。
StructToRow
Visual Base UDT をバイトの行に変換します。
PALN32.DLL
row (1 to n) As Byte
パック化されたデータを格納するための出力配列。
fld (1 to n) As FieldMap
個々のフィールドのデータ型を決定するために使用される FieldMap 配列。
udt As Any
データを取得する UDT。
udtSize As Long
UDT のサイズ。LenB( ) を使用してこの値を生成します。
Integer
問題なければ 0 です。それ以外はエラーが発生しました。
1 フィールド型 FLD_UNICODE は、データベース行(パック構造)と UDT(ユーザー定義データ型)のどちらでも UNICODE で格納される、Visual Basic の String 型のフィールドを指定するために使用されます。フィールド型 FLD_STRING を使用した場合、フィールドは、データベース行ではシステムのデフォルトの ANSI コード ページ文字セットに変換されますが、UDT(ユーザー定義データ型)では UNICODE が使用されます。要するに、文字列フィールドを UNICODE でデータベースに格納したい場合は、フィールド型 FLD_UNICODE を選択します。文字列フィールドを、システムのデフォルトの ANSI コード ページ文字セットでデータベースに格納したい場合は、FLD_STRING を選択します。