拡張モジュール

外部モジュール(Extension DLL)を使用するためには、指定された手順に従って、拡張モジュール(DLL)を作成する必要があります。新規モジュールを作成したり、既存のモジュールを使用するために必要な内容を説明します。

開発環境

nexacro platformで使用可能な外部モジュールを作成するには、以下のツールとライブラリが必要です。

  1. Microsoft Visual Studio2005

    Visual Studioのバージョンが2005よりも高い場合には、プラットフォームのツールセットをv80にビルドします。

  2. V8 JavaScriptエンジン

    https://code.google.com/p/v8/

プロジェクト作成と設定

プロジェクト作成

  1. [新しいプロジェクト]を実行した後、[テンプレート > Visual C++ > Win32]項目の[Win32プロジェクト]を選択します。名前の項目に、プロジェクト名を入れて、[確認]をクリックします。

  1. 設定を確認した後 [次へ]ボタンをクリックします。

  1. [アプリケーション設定]で、アプリケーションの種類にDLLを選択し、[完了]ボタンをクリックします。

プロジェクト設定

  1. [追加のインクルードディレクトリ]にV8 Javascript Engineのv8.hパスを追加します。

  2. [追加の依存ファイル]に「v8.lib」を追加します。

  3. [追加のライブラリディレクトリ]に、[追加の依存関係]のv8 Libのパスを追加します。

拡張モジュール製作

nexacro platformエンジンでは、拡張モジュールのExtensionInitialize情報を読み込み、設定します。ExtensionInitializeでDLLに必要な初期化処理とattachオブジェクトのようなfunctionポインタ値を設定します。

Entry Funcs

v8::Objectにv8::Functionを設定する関数を指定します。

typedef bool (*pFnAttachObject)( v8::Handle<v8::Object>*);

Initialize

初期化段階では、下記のようなタスクを処理します。

extern "C" __declspec(dllexport) bool ExtensionInitialize()

EntryPoint

EntryPoint段階では、下記のような作業を処理します。

extern "C" __declspec(dllexport) bool ExtensionEntryPoint(EXTENSIONENTRYFUNCS*)

Shutdown

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)が発生することがありますので、ロードされていないモジュールのオブジェクトは使用しないでください。