ガイド開発ガイド

ネイティブモジュールを追加する

fibjsネイティブモジュールによって提供される機能以外の機能が必要な場合、またはfibjsにコードを提供したい場合は、この記事が役立つ場合があります。

idlファイルを書き込む

idlは、fibjsでネイティブモジュールとオブジェクトメソッドを定義するために使用される記述言語です。

独自のfibjsモジュールの作成を開始する前に、idl記述言語を作成する必要があります。例としてカスタムモジュール名を取り上げましょう。説明的な言語name.idlを記述し、このファイルを$ {{fibjs_project_dir}} / idl / zh-cn /ディレクトリに配置する必要があります。$ {{fibjs_project_dir}}はfibjsプロジェクトが配置されているディレクトリを表します。

私たちの名前モジュールは非常に単純です。テストメソッドは1つだけです。そのパラメータは文字列です。この文字列は歌詞です。テストメソッドは歌詞が正しいかどうかを判断し、戻り値はブール型です。 name.idlは次のように記述されます

1 2 3 4 5 6 7 8 9 10 11 12 13 14
/*! @brief name module how to use @code var name = require('name'); @endcode */ module name { /*! @brief 测试输入的字符串是不是正确的歌词 @param lyrics 歌词 */ static Boolean test(String lyrics); };

ヘッダーファイルを生成する

toolsディレクトリでfibjs idlc.jsコマンドを実行します。これにより、idlディレクトリ内のすべてのidlファイルが読み取られ、それらが解析されて、対応するヘッダーファイルとドキュメントが生成されます。生成されたヘッダーファイルは、「fibjs / include / ifs /」ディレクトリに保存されます。下。たとえば、name.idlは、name_baseクラスを定義するヘッダーファイル$ {{fibjs_project_dir}} / fibjs / include / ifs / name.hを自動的に生成します。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
/*************************************************************************** * * * This file was automatically generated using idlc.js * * PLEASE DO NOT EDIT!!!! * * * ***************************************************************************/ #ifndef _name_base_H_ #define _name_base_H_ /** @author Leo Hoo <lion@9465.net> */ #include "../object.h" namespace fibjs { class name_base : public object_base { DECLARE_CLASS(name_base); public: // name_base static result_t test(exlib::string lyrics, bool& retVal); public: static void s__new(const v8::FunctionCallbackInfo<v8::Value>& args) { CONSTRUCT_INIT(); Isolate* isolate = Isolate::current(); isolate->m_isolate->ThrowException( isolate->NewString("not a constructor")); } public: static void s_test(const v8::FunctionCallbackInfo<v8::Value>& args); }; } namespace fibjs { inline ClassInfo& name_base::class_info() { static ClassData::ClassMethod s_method[] = { { "test", s_test, true } }; static ClassData s_cd = { "name", true, s__new, NULL, ARRAYSIZE(s_method), s_method, 0, NULL, 0, NULL, 0, NULL, NULL, NULL, &object_base::class_info() }; static ClassInfo s_ci(s_cd); return s_ci; } inline void name_base::s_test(const v8::FunctionCallbackInfo<v8::Value>& args) { bool vr; METHOD_NAME("name.test"); METHOD_ENTER(); METHOD_OVER(1, 1); ARG(exlib::string, 0); hr = test(v0, vr); METHOD_RETURN(); } } #endif

ソースコードを書く

メソッドs_testは、メソッドtestをラップするv8アクセサーです。ここでは、testメソッドを実装するだけで済みます。testメソッドには2つのパラメーターがあり、v0は入力歌詞、vrは戻り値です。 cppファイルを$ {{fibjs_project_dir}} / fibjs / src /ディレクトリに配置し、ヘッダーファイルを$ {{fibjs_project_dir}} / fibjs / includeディレクトリに配置します。この例では、追加のヘッダーファイルは必要ありません。次の内容で、fibjs / src /ディレクトリに新しいファイルname.cppを作成します。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#include "object.h" #include "ifs/name.h" namespace fibjs { DECLARE_MODULE(name); result_t name_base::test(exlib::string lyrics, bool& retVal) { if (lyrics == "youmeiyounameyishougehuirangnituranxiangqiwo") retVal = true; else retVal = false; return 0; } }

DECLARE_MODULE(name);この文、この文は「name」モジュールを宣言し、それをjavascriptオブジェクトに登録することに注意してください。ソースコードを書くときにこの文を追加する必要があります。 v0.25.0以降のバージョンでは、再利用しやすいようにfibjsモジュールを削除したため、 fibjs/program/src/fibjs.cppファイルのimportModule関数に次の文を追加する必要があります。 IMPORT_MODULE(name);カスタムモジュールをインストールします。

コンパイルしてテストする

Windowsでコンパイルする前に、 fibjs tools/vsmake.jsを実行してから、ビルドする必要があります。コンパイルと実行の結果は次のとおりです。名前

総括する

fibjsのネイティブモジュールとオブジェクトを追加および変更する方法を学びました。さまざまな複雑なモジュールを作成できます。また、モジュール作成のサポートとして、サードパーティのライブラリをfibjsに移植することもできます。あなたはfibjsにもっと貢献することを歓迎します。