粗茶でございます日本語 プログラミング 言語 「なでしこ」 大好き 

この記事に含まれるtag :
なでしこ2.0  C#  プラグイン  

スポンサーサイト

   ↑  --/--/-- (--)  カテゴリー: スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

(記事編集) http://nadesocha.blog.fc2.com/?overture" target="_new

--/--/-- | Comment (-) | ホーム | ↑ ページ先頭へ ↑ |

なでしこ2.0のプラグイン作成

   ↑  2010/10/02 (土)  カテゴリー: なでしこ全般

プラグインの実装


 なでしこ2.0が開発中ですが、現在プラグインが実装されましたので、自由に命令を追加することができるようになりました。

プラグインを作ってみる


 そこで、ちょっとテスト的に簡単なプラグインを作ってみました。
 ビルドしてみたところ、きちんと動作しました。感動!!
using System;
using System.Collections.Generic;
using System.Text;

using NakoPlugin;
using System.Windows.Forms;

namespace NakoPluginSocha
{
public class NakoPluginSocha : INakoPlugin
{
//--- プラグインの宣言 ---
string _description = "粗茶テストプラグイン";
double _version = 1.0;
//--- プラグイン共通の部分 ---
public double TargetNakoVersion { get { return 2.0; } }
public string Name { get { return this.GetType().FullName; } }
public double PluginVersion { get { return _version; } }
public string Description { get { return _description; } }
public bool Used { get; set; }
//--- 関数の定義 ---
public void DefineFunction(INakoPluginBank bank)
{
//引数なし、戻り値なし
bank.AddFunc("粗茶する", "", NakoVarType.Void, _sochaMethod, "自己紹介す。", "そちゃする");
//引数あり、戻り値(文字列)
bank.AddFunc("飛行机する", "SとAを", NakoVarType.String, _kujiraMethod, "S(文字列)にA(数値)を連結して、結果を「それ」に返す。", "ひこうづくえする");
}

// Define Method 実際の動作を定義する
public Object _sochaMethod(INakoFuncCallInfo info)
{
string myName;
myName = "私の名前は粗茶です。";
MessageBox.Show(myName, "これはテストです。", MessageBoxButtons.OK);
return null;
}

public Object _kujiraMethod(INakoFuncCallInfo info)
{
string s = info.StackPopAsString();
string a = info.StackPopAsString();
return s + a;
}

// アプリ開始時に実行する処理
public void PluginInit(INakoInterpreter runner)
{
}


// アプリ終了時に実行する処理(メモリの解放など)
public void PluginFin(INakoInterpreter runner)
{
}
}
}


プラグインの作り方


Visual Studio 2010の場合


 プロジェクトを開くと、Visual Studio 変換ウィザードが開きます。
 これは、なでしこ2.0が.NET Frameworkの古いバージョン(3.5)で作成されているためです。ウィザードの画面では「完了」をクリックします。

プロジェクトを作成する


 プロジェクトを作成または追加します。dllを作成するので、クラスライブラリを選択します。
 プロジェクト名はプラグイン名にします。
NakoPluginSocha

ファイル名を変更する


 ファイル名がデフォルトのままならば、プラグイン名と同じに変更します。
NakoPluginSocha.cs

参照設定を変更する


 参照設定で不要なものを削除します。
 参照の追加などで、必要なものを追加します。(Libnakoは必須です)
 プログラムの先頭にあるusingを編集します。
using System;
using System.Collections.Generic;
using System.Text;

using NakoPlugin;
using System.Windows.Forms;

クラスにインターフェースを継承する


 クラスにINakoPlugin(インターフェース)を継承します。
    public class NakoPluginSocha : INakoPlugin

TargetNakoVersionプロパティ


 対応プラグインのバージョン番号。なでしこのどのバージョン用のプラグインかを表します。なでしこ2.0用のプラグインですので、return 2.0とします。(読み取り専用)
    	public double TargetNakoVersion { get { return 2.0; } }

Nameプロパティ


 クラスの名前を返すプロパティです。次の通りそのまま記入します。(読み取り専用)
        public string Name { get { return this.GetType().FullName; } }

PluginVersionプロパティ


 このプラグインのバージョンを返すプロパティです。任意の値をreturnの後に設定します。(読み取り専用)
    	double _version = 1.0;
public double PluginVersion { get { return _version; } }

Descriptionプロパティ


 このプラグインの説明を返すプロパティです。(読み取り専用)
    	string _description = "粗茶テストプラグイン";
public string Description { get { return _description; } }

Usedプロパティ


 プラグインが利用されたかどうかを判別するのに使用されます。次の通りそのまま記入します。
        public bool Used { get; set; }

命令の登録


 命令の名前や引数、プログラムなどをシステムに登録します。
 public void DefineFunction(INakoPluginBank bank)の中に、bank.AddFuncで「命令の名前、引数の定義、関数の戻り値、実際に処理を行うC#のデリゲート、関数の説明、命令のよみがな」の順に記述します。
        public void DefineFunction(INakoPluginBank bank)
{
//引数なし、戻り値なし
bank.AddFunc("粗茶する", "", NakoVarType.Void, _sochaMethod, "自己紹介する。", "そちゃする");
//引数あり、戻り値(文字列)
bank.AddFunc("飛行机する", "SとAを", NakoVarType.String, _kujiraMethod, "S(文字列)にA(数値)を連結して、結果を「それ」に返す。", "ひこうづくえする");
}

 引数が不要な場合は、""とします。
 戻り値が無い場合は、NakoVarType.Voidとします。
 NakoVarType.Stringは、戻り値が文字列であることを表します。戻り値は「それ」に入ります。

命令の定義


 実際に命令の挙動を定義します。
 public Object 命令(INakoFuncCallInfo info)の中に記述します。
        public Object _sochaMethod(INakoFuncCallInfo info)
{
string myName;
myName = "私の名前は粗茶です。";
MessageBox.Show(myName, "これはテストです。", MessageBoxButtons.OK);
return null;
}

 「粗茶する」命令は、挨拶のダイアログを表示します。
 戻り値が無い場合は、return nullとします。
        public Object _kujiraMethod(INakoFuncCallInfo info)
{
string s = info.StackPopAsString();
string a = info.StackPopAsString();
return s + a;
}

 「飛行机する」命令は、ふたつの引数を連結して返します。
 引数は、info.StackPopAsString()で、第1引数から順に取り出します。この場合は文字列として取り出します。

エラー処理


 プラグインの中でエラーが発生したことを伝えるには、次のようにエラーメッセージを投げることができます。
throw new NakoPluginRuntimeException("エラーメッセージ");

プラグインの初期化


 最初にプラグインが呼び出された時に実行する部分です。INakoInterpreterを引数にとることで、複数のなでしこエディタを起動している場合に、どのエディタから呼び出されたのか判断できます。
 今回は何もしませんので、空っぽのままです。
        // アプリ開始時に実行する処理
public void PluginInit(INakoInterpreter runner)
{
}

プラグインの終了


 プログラムが終了するときに実行する部分です。オブジェクトを手動で開放するなど、安全に終了できるようにします。
 今回は何もしませんので、空っぽのままです。
        // アプリ終了時に実行する処理(メモリの解放など)
public void PluginFin(INakoInterpreter runner)
{
}

メインプログラム


 メインプログラムで、なでしこプログラムを書きます。(現在は、DemoCNako2のprogram.csに書きます。)
            compiler.DirectSource =
"粗茶する。" +
"「日本語」と「プログラミング」を飛行机する。" +
"それを言う。";

 また、メインプログラムの参照設定にプロジェクトNakoPluginSochaを追加します。

ビルド


 ビルド(デバッグではない)してバイナリを作成します。
 メインプログラムのフォルダに、bin\Debug\フォルダがあり、その中にプログラム(exe)とプラグイン(dll)が作成されているはずです。

実行結果


20101013235939.gif
20101013235938.gif
20101013235936.gif



関連記事

この記事に含まれるtag : なでしこ2.0 C# プラグイン 

FC2スレッドテーマ : プログラミング (ジャンル : コンピュータ

(記事編集) http://nadesocha.blog.fc2.com/blog-entry-136.html

2010/10/02 | Comment (0) | Trackback (0) | ホーム | ↑ ページ先頭へ ↑ |

Comment

コメント:を投稿する 記事: なでしこ2.0のプラグイン作成

お気軽にコメント:をぞうぞ。
非公開 (管理人のみ閲覧可能なコメント:) にしたい場合には、ロック にチェックを入れてください。

  任意 : 後から修正や削除ができます。
  非公開コメント:として投稿する。(管理人にのみ公開)

Trackback

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。