ここでは、拡張モジュールの実装方法の詳細と、実装時の注意点を解説します。
FlipCalによる拡張モジュールの扱い
FlipCal APIを実装する
拡張モジュール作成時の注意点
各種定義ファイルのサンプルはこちらです。
C/C++用のヘッダファイル
Delphi用のユニットファイル
FlipCalインタプリタは起動時に拡張モジュールをロードします。FlipCalが拡張モジュールのロードを試みるのは起動時だけです。FlipCalインタプリタはFlipCal.exeの存在するフォルダ内にある、拡張子が VMX の全てのファイルを、拡張モジュールであるとみなしてロードを試みます。
ロードの手順は以下のようになります。
いずれかの時点でエラーが発生した拡張モジュールは、直ちにアンロードされます。
拡張モジュールが実装しFlipCalから呼び出されるAPIには、拡張モジュールで必ず実装しなければならないものがあります。 GetModuleInfo関数は全ての拡張モジュールで必須です。 これ以外のAPIの実装は必須ではありませんが、提供する機能によって、次のような組み合わせでの実装が必要となります。
拡張モジュールが定数を提供する場合には、次の2つのAPIを実装する必要があります。
GetConstantsNum関数
GetConstants関数
拡張モジュールが関数を提供する場合には、次の3つのAPIを実装する必要があります。
GetFunctionsNum関数
GetFunctions関数
FunctionDispatcher関数
FunctionDispatcher関数はFilpCalインタプリタが、拡張モジュールが提供している関数を呼び出すときに使用します。
拡張モジュールが初期化を必要とする場合はInit関数を実装してください。
Stdout関数は拡張モジュールが使用する標準出力のためのAPIです。 拡張モジュールはこのAPIを使用することでFlipCalのメインウィンドウに文字列を表示させることができます。 拡張モジュールでStdout関数を使用したい場合には、拡張モジュールはSetStdout関数を実装する必要があります。 FlipCalはSetStdout関数を呼び出すことで、FlipCal内のStdout関数のアドレスを拡張モジュールへ知らせます。
FunctionDispatcher関数内で発生したエラーの詳細をユーザーへ通知するためには、標準出力を使用します。 エラーの詳細の通知は必須ではありませんが、拡張モジュールはSetStdout関数を実装して標準出力を使用できるようにし、可能な限りエラーの詳細を通知するべきです。
FlipCalインタプリタ・レベル1では、拡張モジュールがインタプリタによって選択されている言語(ここでいう言語は英語、日本語などを指します)を知る仕組みは提供されていません。 したがって、拡張モジュールが標準出力に出力する文字列では、漢字などのような特定の言語に依存した文字の使用は避けるべきです。 特定言語に依存する場合には、そのドキュメントなどで使用する言語環境を限定してください。
拡張モジュールを作成するときには以下の点に注意点してください。
次のファイルは、拡張モジュールをC/C++で作成する場合に使用できるCヘッダファイルのサンプルで、FlipCal APIで使用する定数と構造体の定義が含まれています。 コンパイラとしてBorland C++ Compiler 5.5を使用する場合はこのまま使用できると思います。
次のファイルは、拡張モジュールをBorland Delphi 5で作成する場合に使用できるユニットファイルで、FlipCal APIで使用する定数と構造体などの定義が含まれています。
FlipCal自身はDelphi 5を使用して作成されており、また、実際にこのユニットファイルを使用しています。