- 追加された行はこの色です。
- 削除された行はこの色です。
* 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 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定義ファイル
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>
<Your Plugin Folder>/ -- ここに新しいプラグインフォルダを作ります
tools/ -- プラグイン作成のためのツール類をここに置きます
** プロジェクトの作成 [#wb29c63c]
Visual StudioでDLLアプリケーションプロジェクトを作成します。~
プロジェクトのプロパティを設定します。
モジュール定義ファイル: <YourPlugin>.def
呼び出し規約 : __stdcall (/Gz)
追加のインクルードディレクトリ: .;..\common
| モジュール定義ファイル | <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
*** 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
DLLマクロは2回呼び出されます。どの呼び出しかは GetMode() で確認できます。
- 1回目(拡張子評価): 実行しようとするマクロの拡張子をチェックし、自分が実行するマクロかどうかを評価します。
- 2回目(マクロ実行): 1回目の評価でSetMatch(1)を返した場合は、マクロの実行のため呼び出されます。
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プラグインでは何もする必要はありません。
- WideString GetExt();~
マクロの拡張子を取得します。
GetMode() == 0の場合にマクロ拡張子を評価するために利用します。
(WideStringはstd::wstringです)
- WideString GetSource();~
マクロのソースを取得します。
マクロ拡張子評価時にはセットされていません。
マクロ実行時にセットされています。
*** Outline [#x58e5e5a]
サクラエディタのアウトライン情報にアクセスします。~
DLLアウトライン呼び出し時に提供します。~
提供するメソッドと使用方法は以下のファイルを参照してください。~
sakura_core/plugin/COutlineIfObj.h
external/plugins/common/CExternalOutlineIfObj.h
*** SmartIndent [#n239fba4]
サクラエディタのスマートインデント情報にアクセスします。~
DLLスマートインデント呼び出し時に提供します。~
提供するメソッドと使用方法は以下のファイルを参照してください。~
sakura_core/plugin/CSmartIndentIfObj.h
external/plugins/common/CExternalSmartIndentIfObj.h
*** Complement [#me4e318a]
サクラエディタの補完情報にアクセスします。~
DLL補完呼び出し時に提供します。~
提供するメソッドと使用方法は以下のファイルを参照してください。~
sakura_core/plugin/CComplementIfObj.h
external/plugins/common/CExternalComplementIfObj.h
----
- プラグイン仕様書にある[DLL]は[Dll]の誤りです。 -- &new{2013-04-14 (日) 18:47:17};
#comment
#attach