- 追加された行はこの色です。
- 削除された行はこの色です。
* DLLプラグイン用のI/F [#vf17fc4a]
-ページ: [[Request]]
-投稿者: [[anonymous]]
-優先順位: 低
-状態: 提案
-カテゴリー:
-投稿日: 2013-03-25 (月) 20:13:07
-バージョン:
** メッセージ [#e1f47ad2]
DLLプラグイン用のI/Fを実装してほしい。
----
* DLLプラグイン仕様書(α版) [#c5bb3491]
※DLLプラグインは開発中です。~
プロトタイプはssrc2060ベースです。~
現在、DLLプラグインへの疎通まで確認しています。~
サクラエディタ本体の修正もあるため、既存のサクラエディタでは動作しません。~
各アクセスクラスの妥当性は、各アクセスクラスを使用する実証プラグインに委ねます。~
** はじめに [#kbb7d801]
DLLプラグインはDLLを使用してサクラエディタ本体に様々な機能を提供します。~
DLLプラグインはサクラエディタのプラグイン機能の実装方法の1つです。~
DLLプラグインの開発を支援するため、サクラエディタが提供するインタフェースクラスにアクセスするクラスを用意しています。~
(プラグイン, エディタ, マクロ, アウトライン, スマートインデント, 補完)~
サクラエディタへのプラグイン登録方法はプラグイン仕様書を参照してください。~
** DLLプラグイン開発環境 [#e9b31fc6]
プラグイン開発フォルダは以下のような構成になります。~
<Sakura Editor Source>/
sakura_core/
plugin/
SakuraPlugin.h -- DLLプラグインI/Fヘッダ
external/
plugins/
common/
CBasePluginService.cpp -- プラグインサービス基本クラス
CBasePluginService.h -- プラグインサービス基本クラス
CExternalComplementIfObj.cpp -- 補完アクセスクラス
CExternalComplementIfObj.h -- 補完アクセスクラス
CExternalEditorIfObj.cpp -- エディタアクセスクラス
CExternalEditorIfObj.h -- エディタアクセスクラス
CExternalIfObj.h -- アクセスクラス基本クラス
CExternalMacroIfObj.cpp -- マクロアクセスクラス
CExternalMacroIfObj.h -- マクロアクセスクラス
CExternalOutlineIfObj.cpp -- アウトラインアクセスクラス
CExternalOutlineIfObj.h -- アウトラインアクセスクラス
CExternalPluginIfObj.cpp -- プラグインアクセスクラス
CExternalPluginIfObj.h -- プラグインアクセスクラス
CExternalSmartIndentIfObj.cpp -- スマートインデントアクセスクラス
CExternalSmartIndentIfObj.h -- スマートインデントアクセスクラス
SakuraMeetsPlugin.cpp -- プラグインサービス公開API
SakuraMeetsPlugin.h -- プラグインサービス公開API
SakuraMeetsPlugin.def -- プラグインサービス公開API定義ファイル
SakuraMeetsPlugin.def -- プラグインサービス公開APIサンプル定義ファイル
plugin.def -- プラグイン定義サンプルファイル
HelloPlugin/
CPluginService.cpp -- プラグインサービス本体です
CPluginService.h -- プラグインサービス本体です
dllmain.cpp -- ここに hInstance 設定を追加します
HelloPlugin.cpp -- ここに独自の公開APIを追加します
HelloPlugin.def -- プラグインサービス公開API定義ファイル
HelloPlugin.sln
HelloPlugin.vcxproj
HelloPlugin/
plugin.def -- プラグイン定義サンプルファイル
ReadMe.txt
stdafx.cpp
stdafx.h
<Your Plugin Folder>/ -- ここに新しいプラグインフォルダを作ります
tools/ -- プラグイン作成のためのツール類をここに置きます
<Your Tool Folder>/
** プロジェクトの作成 [#wb29c63c]
Visual StudioでDLLアプリケーションプロジェクトを作成します。~
プロジェクトのプロパティを設定します。
| モジュール定義ファイル | <YourPlugin>.def |
| 呼び出し規約 | __stdcall (/Gz) |
| 追加のインクルードディレクトリ | .;..\common |
プロジェクトに common/ 配下のソースファイルとヘッダファイルをすべて追加します。~
dllmain.cppに以下のコードを追加します。~
#include "stdafx.h"
+ #include "SakuraMeetsPlugin.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
+ SetDllInstance(hModule);
switch (ul_reason_for_call)
{
...
CBasePluginServiceクラスを継承したCPluginServiceクラスを作成します。~
新しいコマンドを追加する場合は、<YourPlugin>.cppと<YourPlugin>.defにAPIを追加します。~
提供しているクラスはすべてワイドキャラです。~
SJISやUTF8のライブラリにアクセスする場合は適宜変換してください。~
** アクセスクラス [#w0fe1df1]
*** Plugin [#w0b62b03]
サクラエディタのプラグイン情報にアクセスします。~
DLL呼び出し時には必ず提供します。~
提供するメソッドと使用方法は以下のファイルを参照してください。~
sakura_core/plugin/CPluginIfObj.h
external/plugins/common/CExternalPluginIfObj.h
- void SetOption(LPCWSTR section, LPCWSTR key, LPCWSTR value);~
オプションファイルに値を書き込みます。
- void AddCommand(LPCWSTR arg1, LPCWSTR arg2, LPCWSTR arg3);~
- WideString GetPluginDir();~
プラグインディレクトリを取得します。
- WideString GetDef(LPCWSTR section, LPCWSTR key);~
設定ファイルから値を読み込みます。
- WideString GetOption(LPCWSTR section, LPCWSTR key);~
オプションファイルから値を読み込みます。
- int GetCommandNo();~
実行中のプラグイン番号を取得します。
*** Editor [#g05a5afe]
サクラエディタのエディタ情報にアクセスします。~
DLL呼び出し時には必ず提供します。~
提供するメソッドと使用方法は以下のファイルを参照してください。~
sakura_core/macro/CEditorIfObj.h
external/plugins/common/CExternalEditorIfObj.h
- おなじみのコマンド群です。使用方法はマクロヘルプを参照してください。
*** Macro [#d4c25abf]
サクラエディタのマクロ情報にアクセスします。~
DLLマクロ呼び出し時に提供します。~
提供するメソッドと使用方法は以下のファイルを参照してください。~
sakura_core/macro/CMacroIfObj.h
external/plugins/common/CExternalMacroIfObj.h
external/plugins/common/CBasePluginService.cpp の OnPluginMacroメソッド
DLLマクロは2回呼び出されます。どの呼び出しかは GetMode() で確認できます。~
1回目(拡張子評価): 実行しようとするマクロの拡張子をチェックし、自分が実行するマクロかどうかを評価します。~
2回目(マクロ実行): 1回目の評価でSetMatch(1)を返した場合は、マクロの実行のため呼び出されます。~
~
- void SetMatch(const int nMatch);~
実行マクロがこのDLLのものであることを通知します。
1回目の呼び出しで拡張子が一致した場合は nMatch = 1 を指定して呼び出します。
| 0 | 自マクロ拡張子ではない |
| 1 | 自マクロ拡張子である |
- int GetMode();~
実行マクロのモードを取得します。
| 0 | マクロ拡張子評価 | GetExt()でマクロ拡張子を取得し、自マクロ用である場合はSetMatch(1)を行います |
| 1 | マクロ実行 | GetSource()で取得したソースを実行します |
- int GetFlags();~
マクロ実行時のflagsのマスク値です。
エディタ本体側で自動付与されますので、DLLプラグインでは何もする必要はありません。
CBasePluginService::OnPluginMacro()で自動付与されますので、通常はこの値を使用することはありません。
- WideString GetExt();~
マクロの拡張子を取得します。
GetMode() == 0の場合にマクロ拡張子を評価するために利用します。
(WideStringはstd::wstringです)
- WideString GetSource();~
マクロのソースを取得します。
マクロ拡張子評価時にはセットされていません。
マクロ実行時にセットされています。
*** Outline [#x58e5e5a]
サクラエディタのアウトライン情報にアクセスします。~
DLLアウトライン呼び出し時に提供します。~
提供するメソッドと使用方法は以下のファイルを参照してください。~
sakura_core/plugin/COutlineIfObj.h
external/plugins/common/CExternalOutlineIfObj.h
- void AddFunctionInfo(const int arg1, const int arg2, LPCWSTR arg3, const int arg4);~
アウトライン解析に追加します。
- void AddFunctionInfo2(const int arg1, const int arg2, LPCWSTR arg3, const int arg4);~
深さ指定をしてアウトライン解析に追加します。
- void SetTitle(LPCWSTR arg1);~
アウトラインダイアログのタイトルを指定します。
- void SetListType(const int arg1);~
アウトライン解析リストの種別を指定します。
*** SmartIndent [#n239fba4]
サクラエディタのスマートインデント情報にアクセスします。~
DLLスマートインデント呼び出し時に提供します。~
提供するメソッドと使用方法は以下のファイルを参照してください。~
sakura_core/plugin/CSmartIndentIfObj.h
external/plugins/common/CExternalSmartIndentIfObj.h
- WideString GetChar();~
押下したキーを取得します。
*** Complement [#me4e318a]
サクラエディタの補完情報にアクセスします。~
DLL補完呼び出し時に提供します。~
提供するメソッドと使用方法は以下のファイルを参照してください。~
sakura_core/plugin/CComplementIfObj.h
external/plugins/common/CExternalComplementIfObj.h
- WideString GetCurrentWord();~
補完対象の文字列を取得します。
- int GetOption();~
オプションを取得します。
- int AddList(LPCWSTR arg1);~
候補に追加します。
~
~
----
- プラグイン仕様書にある[DLL]は[Dll]の誤りです。 -- &new{2013-04-14 (日) 18:47:17};
- CPluginIfObj::m_nPlugIndexをコンストラクタで初期化すること。 -- &new{2013-04-15 (月) 20:49:06};
- DLLプラグイン内で正規表現ライブラリが簡単に使えるほうがいいです。 -- &new{2013-04-15 (月) 21:12:43};
#comment
#attach