|
* 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定義ファイル 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/ -- プラグイン作成のためのツール類をここに置きます ** プロジェクトの作成 [#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 *** 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)を返した場合は、マクロの実行のため呼び出されます。 *** 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 |