外部モジュール(Extension DLL)を使用するためには、指定された手順に従って、拡張モジュール(DLL)を作成する必要があります。新規モジュールを作成したり、既存のモジュールを使用するために必要な内容を説明します。
開発環境
nexacro platformで使用可能な外部モジュールを作成するには、以下のツールとライブラリが必要です。
Microsoft Visual Studio2005
Visual Studioのバージョンが2005よりも高い場合には、プラットフォームのツールセットをv80にビルドします。
V8 JavaScriptエンジン
プロジェクト作成と設定
プロジェクト作成
[新しいプロジェクト]を実行した後、[テンプレート > Visual C++ > Win32]項目の[Win32プロジェクト]を選択します。名前の項目に、プロジェクト名を入れて、[確認]をクリックします。
設定を確認した後 [次へ]ボタンをクリックします。
[アプリケーション設定]で、アプリケーションの種類にDLLを選択し、[完了]ボタンをクリックします。
プロジェクト設定
[追加のインクルードディレクトリ]にV8 Javascript Engineのv8.hパスを追加します。
[追加の依存ファイル]に「v8.lib」を追加します。
[追加のライブラリディレクトリ]に、[追加の依存関係]のv8 Libのパスを追加します。
拡張モジュール製作
nexacro platformエンジンでは、拡張モジュールのExtensionInitialize情報を読み込み、設定します。ExtensionInitializeでDLLに必要な初期化処理とattachオブジェクトのようなfunctionポインタ値を設定します。
Entry Funcs
v8::Objectにv8::Functionを設定する関数を指定します。
typedef bool (*pFnAttachObject)( v8::Handle<v8::Object>*);
Initialize
初期化段階では、下記のようなタスクを処理します。
nexacro platformで、nexacro._addExtensionModule関数で拡張モジュールを最初にロードするときに呼び出されます。
nexacro._clearExtensionModule関数が呼び出される前まで、呼び出されません。
拡張モジュールで初期化に必要な作業を進めます。
extern "C" __declspec(dllexport) bool ExtensionInitialize()
EntryPoint
EntryPoint段階では、下記のような作業を処理します。
EXTENSIONENTRYFUNCSを設定します。
nexacro platformでnexacro._addExtensionModule関数に毎回呼び出され、引数として渡されたJavaScriptオブジェクトにv8::Functionなどを設定します。
extern "C" __declspec(dllexport) bool ExtensionEntryPoint(EXTENSIONENTRYFUNCS*)
Shutdown
nexacro platformで、nexacro._clearExtensionModuleを実行して呼び出されます。
拡張モジュールをこれ以上使用しないときに必要な作業を進めます。
extern "C" __declspec(dllexport) void ExtensionShutdown()
nexacro platform API
拡張モジュールの開発に関するnexacro platform APIは下記の通りです
nexacro._addExtensionModule
拡張モジュールのロード時に使用するAPIです。
nexacro._addExtensionModule = function(object, modulepath)
Argument | 説明 |
---|---|
object | 拡張モジュールのプロパティ、関数などを保存するオブジェクト |
modulepath | 拡張モジュールのフルパスを指定します。 nexacro platformでサポートされるPath Aliasを使用することができます。 |
var ext = {}; nexacro._addExtensionModule(ext, "c:/extension.dll"); nexacro._addExtensionModule(ext, "%COMPONENT%\extension.dll");
nexacro._clearExtensionModule
拡張モジュールをこれ以上使用せず、ロードされたモジュールを終了させるときに使用するAPIです。
nexacro._clearExtensionModule = function(modulepath)
Argument | 説明 |
---|---|
modulepath | 終了する拡張モジュールの完全パスを指定します。 nexacro platformでサポートされるPath Aliasを使用することができます。 値が与えられないと、ロードされた拡張モジュールをすべて終了します。 |
nexacro._clearExtensionModule関数で削除された拡張モジュールのオブジェクトを継続使用する場合、メモリリーク(memory leak)が発生することがありますので、ロードされていないモジュールのオブジェクトは使用しないでください。