●ヘッダ

VC 5.0で開発を行う方はRALの開発キットに同梱のヘッダファイル、インポートライブラリをそのまま利用出来ます。5.0より前のバージョンのVCでも多分問題なく利用出来るとは思いますが、確認はしていないので保証は出来ません(^^;)ただ、ヘッダファイルは問題なく利用出来ます。

RALが実装している各APIをコールしているソースファイルで必ずRAL.Hをインクルードするようにします。また、リンクするファイルにRAL.LIBを含めます。これはメニューから「プロジェクト」->「設定」で表示されるダイアログの「リンク」タブを選択し、「オブジェクト/ライブラリモジュール」の欄にRAL.LIBを追加することで指定できます。その場合に、ダイアログ左側上部の「設定の対象」コンボボックスに注意して下さい。このコンボボックスではリリース及びデバッグの選択が行えますが、リンクファイルの追加はこの両方に対して行う必要があります。

尚、ヘッダファイルはVC以外にもBC、BCB、TCでも利用可能(のはず^^;)です。

ヘッダファイルでは定義済みマクロを#ifdefや#ifndefのプリプロセッサディレクティブにかけることで各コンパイラのキーワードの違いを吸収しています。もしお使いのコンパイラで正常にコンパイルが通らない場合にはヘッダを修正して使用する必要があります。ヘッダファイルではAPIとSTDCALLの2つのキーワードを定義します。

キーワード VC/BCB BC/TC
API DECLSPEC_IMPORT  なし
STDCALL  WINAPI _export CALLBACK

いずれもRALが実装しているAPIの関数プロトタイプに使用されるキーワードです。APIは記憶クラスの位置に入り、STDCALLは修飾子の位置に入ります。以下の例のように使用されます。

extern API 戻り値 STDCALL 関数名( 引数リスト );

VCとBCBでは定義済みマクロとしてそれぞれ_MSC_VER、__BCPLUSPLUS__が定義されるようです。またBCやTCでは__TURBOC__が定義されるようです。_MSC_VERまたは__BCPLUSPLUS__が定義されている場合には

#define  API DECLSPEC_IMPORT
#define  STDCALL  WINAPI

上記のマクロを定義します。また_MSC_VERと__BCPLUSPLUS__のいずれも定義されていなく且つ__TURBOC__が定義されていれば

#define  API
#define  STDCALL  _export CALLBACK

上記のマクロを定義します。もしお使いのコンパイラでキーワードが異なる場合にはこの部分を修正する必要があります。

●ランタイム

基本的に実行環境にランタイムは必要ありません。必要なモノは全てRAL.DLLにスタティックリンクされています。またMFCも使用していないのでMFCxx.DLLも必要ありません。RAL.DLL本体があればそれで動作可能です。

●

RAL.DLLがエクスポートしているAPIの関数プロトタイプはRAL.hに全て記述されています。RALの各APIでは文字列にchar *を使用しています。const修飾は一切行っていません。ワーニングレベルを上げてコンパイルする場合にはこれが原因でワーニングが報告されるかもしれません。

また文字列としてLPTSTRを使わずに明示的にchar *で扱っているのはRAL.DLLではANSI版のAPIしか提供していないためです。Unicode版のAPIは現在のところ用意する予定がありません。でも通常はANSI版のAPIがあれば事足りるかと思います。

●Windows NT 3.51以前のプラットフォーム

RALでは最近のプラットフォームになってから実装されたAPIや機能を使用しています。従ってWindows NT 3.51等では動作しません。特に「欠落エクスポート」等のメッセージが表示された場合はRALが使用しているAPIがお使いの環境のWindowsに実装されていないため動作しません。以下に動作しない原因となる部分を挙げておきます。

APIまたはマクロ名 目的 種類 補足
InitCommonControls  コモンコントロールライブラリ初期化  API コモンコントロールは95から実装されたモノなのでNT 3.51以前では多分欠落エクスポートになると思います。
ExtractIconEx アイコン抽出 API NT 3.51以前には実装されていません。また、初期の95にも実装されていません。Internet Explorer(?)か何かをインストールすると95でも使えるようになったような気がします。実際我が家の95では問題なく動作しています。ただ果たして本当にIEだったかどうかは定かではありません(^^;)
TreeView_* 各種ツリービューコントロール制御 マクロ NT 3.51以前にはツリービューコントロールがありません。API自体はSendMessageなのでNT 3.51にも当然実装されていますが、前出のInitCommonControlsで引っかかるはずです。
SHChangeNotify 変更通知 API NT 3.51以前には実装されていません。多分欠落エクスポートになると思います。
GetOpenFileName コモンダイアログ API API自体はNT 3.51以前にもありますが、95から増えたオプションを構造体に指定しているのでNT 3.51以前ではどうなるか判りません。

 


戻る