言語インターフェイス モジュール
この章では、Pervasive PSQL SDK インストール オプションに用意されている言語インターフェイス ソース モジュールを示します。
Pervasive Software は、各言語インターフェイス用のソース コードを提供しています。追加情報は、ソース モジュールにあります。
開発者向けオンライン リソースには、さまざまな言語インターフェイス用の記事やサンプル コードが盛り込まれています。http://www.pervasivedb.com をご覧ください。
この章では、以下の項目について説明します。
インターフェイス モジュールの概要
プログラミング言語にインターフェイスがない場合は、コンパイラが複数の言語からの呼び出しが混在した状態をサポートするかどうかを確認してください。そうであれば、C インターフェイスを使用できる場合があります。
表 27 Btrieve 言語インターフェイス ソース モジュール
言語 | コンパイラ | ソース モジュール |
C/C++ | •Embarcadero、Microsoft、WATCOM などの大半の C/C++ コンパイラ。 このインターフェイスには、マルチ プラットフォーム サポートがあります。 •Embarcadero C++ Builder | •BlobHdr.h(Embarcadero または Phar Lap のみを使用する拡張 DOS プラットフォーム) •BMemCopy.obj(Embarcadero または Phar Lap のみを使用する拡張 DOS プラットフォーム) •BMemCopy.asm(BMemCopy.obj のソース) •BtiTypes.h(プラットフォーム依存データ型) •BtrApi.h(Btrieve 関数プロトタイプ) •BtrApi.c(すべてのプラットフォーム用の Btrieve インターフェイス コード) •BtrConst.h(共通 Btrieve 定数) •BtrSamp.c(サンプル プログラム) •GenStat.h(Pervasive ステータス コード) •CBBtrv.cpp •CBBtrv.mak •CBBMain.cpp •CBBMain.dfm •CBBMain.h |
COBOL | •Micro Focus COBOL すべてのバージョン •Microsoft COBOL 3 | •MfxBtrv.bin(DOS Runtime for COBOL Animator、非 Intel バイト オーダー整数) •MfxBtrv.asm(このバイナリのソース) •CobrBtrv.obj(DOS 16 ビット) •CobBtrv.asm(これらのオブジェクトのソース) •Mf2Btrv.bin(DOS runtime for COBOL animator、Intel バイト オーダー整数) •Mf2Btrv.asm(このバイナリのソース) •BtrSamp.cbl(サンプル プログラム) |
Delphi | •Embarcadero Delphi 1 •Embarcadero Delphi 3 以降 | •Btr16.dpr •BtrSam16.pas(サンプル プログラム) •BtrSam16.dfm •BtrApi16.pas •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(サンプル プログラム) •BtrConst.pas(共通 Btrieve 定数) •BlobHdr.pas |
Visual Basic | •Microsoft Visual Basic for Windows NT 以降 / Windows 98/ME | •BtSamp32.vbp •BtrSam32.bas(サンプル プログラム) •BtrFrm32.frm |
以下の表に、Create や Stat などの Btrieve オペレーション用データ バッファーで使用されるいくつかの共通データ型の比較を示します。
表 28 Btrieve データ バッファーで使用される共通データ型
Assembly | C | COBOL | Delphi | Pascal | Visual Basic |
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 と同じです。 |
C/C++
ここでは、Btrieve API の C/C++ モジュール情報を示します。
C/C++ インターフェイスは、プラットフォーム依存型アプリケーションの作成を容易にします。このインターフェイスは、DOS、Windows および Linux オペレーティング システムにおける開発をサポートします。これらのモジュールについては、表
27 でも説明しています。
インターフェイス モジュール
ここでは、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 関数を呼び出すすべてのアプリケーションをサポートします。
BTRCONST.H
BTRCONST.H ファイルには、Btrieve 固有の有効な定数が含まれています。これらの定数を使用すると、Btrieve オペレーション コード、ステータス コード、ファイル仕様フラグ、キー仕様フラグなどの多数の項目への参照を容易に標準化できます。
BTRCONST.H を利用せずに C アプリケーション インターフェイスを使用できますが、このファイルを取り込んでプログラミング作業を単純化することができます。
BTITYPES.H
BTITYPES.H ファイルは、プラットフォーム依存データ型を定義します。Btrieve 関数呼び出しで BTITYPES.H 内のデータ型を使用して、アプリケーションは各オペレーティング システム間で移植されます。
BTITYPES.H では、アプリケーションが動作するオペレーティング システムを指示する際に使用しなければならないスイッチについても説明しています。表
29 はこれらのオペレーティング システムのスイッチのリストを示したものです。
表 29 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 |
Linux | 32 ビット | BTI_LINUX |
Linux | 64 ビット | BTI_LINUX_64 |
Win32 | 32 ビット Windows | BTI_WIN_32 |
Win64 | 64 ビット Windows | BTI_WIN_64 |
BTRSAMP.C
BTRSAMP.C ソース ファイルは、表
29 で説明するオペレーティング システムでコンパイル、リンクおよび実行できるサンプル Btrieve プログラムです。
プログラミングの必要条件
C アプリケーション インターフェイスを使用してアプリケーション プラットフォームを独立型にする場合は、BTITYPES.H で説明しているデータ型を使う必要があります。これらのデータ型の使用方法については、BTRSAMP.C ファイルを参照してください。
メモ: また、プログラムが動作するオペレーティング システムを識別するディレクティブを指定する必要があります。ディレクティブに使用できる値は、ヘッダー ファイル BTITYPES.H に列挙されています。お使いのコンパイラの適切なコマンド ライン オプションを使用して、ディレクティブを指定してください。
COBOL
ここでは、Btrieve API の COBOL モジュール情報を示します。
アニメート型 COBOL の開発者:非アニメート型 COBOL インターフェイスが、パラメーターを右から左へ渡すのに対し、COBOL アニメーターは、スタック パラメーターを左から右へ渡します。ただし、COBOL はアニメート型アプリケーションと非アニメート型アプリケーションのどちらの場合も、整数を Intel ハイ-ロウ形式で渡します。
また、オブジェクト モジュール MF2BTRV.OBJ と CSUPPORT.OBJ は COBOL インターフェイスから削除されています。これらのモジュールの代わりにモジュール COBRBTRV.OBJ を使用してください。
非アニメート型 COBOL の開発者:MicroKernel にパラメーターとして渡されるすべての数値は Intel 形式、つまり、ロウ-ハイ バイト オーダーでなければなりません。これを行うには、COMP-5 として値を定義します。
Delphi
Btrieve Delphi モジュールについては、表
27 で説明しています。
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 オペレーティング システムを指示する際に使用しなければならないスイッチについても説明しています。次の表は、これらのスイッチの一覧を示します。
表 30 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 が Btrieve インターフェイスを正しくコンパイルしてアプリケーションのほかのモジュールにリンクするために、BTRAPID.PAS をコンパイルして Turbo Pascal ユニットを作成し、次にそのユニットをアプリケーションのソース コードの uses 句に示します。
BTRCONST.PAS
BTRCONST.PAS ファイルには、Btrieve に固有な有効の定数が含まれています。これらの定数を使用すると、Btrieve オペレーション コード、ステータス コード、ファイル仕様フラグ、キー仕様フラグなどの多数の項目への参照を容易に標準化できます。
BTRCONST.PAS を使用する場合、そのファイルをコンパイルして Turbo Pascal ユニットを作成し、次にそのユニットをアプリケーションのソース コードの uses 句に示すことができます。
BTRCONST.PAS を利用せずに Pascal アプリケーション インターフェイスを使用できますが、このファイルを使用してプログラミング作業を単純化することができます。
BTRSAMPD.PAS
ソース ファイル BTRSAMPD.PAS は、コンパイル、リンクおよび実行できるサンプル Btrieve プログラムです。
プログラミングの注意事項
Btrieve 関数を呼び出すと、常に、ステータス コードに対応する INTEGER 値が返されます。Btrieve 呼び出しの後、アプリケーションは常にこのステータス コードの値を確認します。ステータス コード 0 は、正常終了したオペレーションを示します。アプリケーションは、非ゼロのステータスを認識し、解決できなければなりません。
どの呼び出しでもすべてのパラメーターを提供する必要がありますが、MicroKernel はすべてのオペレーションにすべてのパラメーターを使用するわけではありません。各オペレーションに関連するパラメーターの詳細説明については、『Btrieve API Guide』を参照してください。
メモ: アプリケーションがバリアント文字列を含む Pascal レコード構造を使用する場合は、たとえレコードがパック化されていなくても、Pascal レコード内の奇数長の要素が追加の記憶バイトを必要とする場合があります。このことは、Create(14)オペレーションのレコード長を定義する場合に考慮が必要な重要問題です。レコード タイプの詳細については、Pascal リファレンス マニュアルを参照してください。
Visual Basic
ここでは、Btrieve API の Visual Basic ソース モジュールについて説明します。
Visual Basic は 32 ビット アプリケーションをコンパイルする際、UDT(ユーザー定義データ型)のメンバーをそれぞれ、その特定のメンバーのサイズに応じて 8 ビット、16 ビット、32 ビットの境界に配置します。構造体と違い、データベース行はパック化されます。つまり、フィールド間に未使用スペースがないということです。配置をオフにする方法はないので、Visual Basic アプリケーションがデータベースにアクセスできるように構造体をパック化およびアンパック化する方法が必要です。Pervasive 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 を取り込むには
•[プロジェクト|参照設定]を選択し、Pervasive 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 です。それ以外は、ユニコードとして格納されます。 | •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 が使用されます。要するに、文字列フィールドをPervasive PSQL データベースに UNICODE で格納したい場合は、フィールド タイプに FLD_UNICODE を選択するということです。文字列フィールドを、デフォルトであるシステムの ANSI コード ページ文字セットでデータベースに格納したい場合は、FLD_STRING を選択します。 |