言語インターフェイス モジュール
この章では、Zen SDK インストール オプションに用意されている言語インターフェイス ソース モジュールを示します。
各言語インターフェイス用のソース コードを提供しています。追加情報は、ソース モジュール自体にあります。
Actian Web サイトの開発者向けオンライン リソースをご覧いただくと、さまざまな言語インターフェイス用の記事やサンプル コードが盛り込まれています。
特定のインターフェイス モジュールの詳細については、以下をお読みください。
インターフェイス モジュールの概要
プログラミング言語にインターフェイスがない場合は、コンパイラが複数の言語からの呼び出しが混在した状態をサポートするかどうかを確認してください。そうであれば、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 を選択します。 |