Request/420 のバックアップ(No.12)




DLLプラグイン用のI/F

  • ページ: Request
  • 投稿者: anonymous
  • 優先順位: 低
  • 状態: 提案
  • カテゴリー:
  • 投稿日: 2013-03-25 (月) 20:13:07
  • バージョン:

メッセージ

DLLプラグイン用のI/Fを実装してほしい。


DLLプラグイン仕様書(α版)

※DLLプラグインは開発中です。
プロトタイプはssrc2060ベースです。
現在、DLLプラグインへの疎通まで確認しています。
サクラエディタ本体の修正もあるため、既存のサクラエディタでは動作しません。
各アクセスクラスの妥当性は、各アクセスクラスを使用する実証プラグインに委ねます。

はじめに

DLLプラグインはDLLを使用してサクラエディタ本体に様々な機能を提供します。
DLLプラグインはサクラエディタのプラグイン機能の実装方法の1つです。
DLLプラグインの開発を支援するため、サクラエディタが提供するインタフェースクラスにアクセスするクラスを用意しています。
(プラグイン, エディタ, マクロ, アウトライン, スマートインデント, 補完)
サクラエディタへのプラグイン登録方法はプラグイン仕様書を参照してください。

DLLプラグイン開発環境

プラグイン開発フォルダは以下のような構成になります。

<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/                             -- プラグイン作成のためのツール類をここに置きます

プロジェクトの作成

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のライブラリにアクセスする場合は適宜変換してください。

アクセスクラス

Plugin

サクラエディタのプラグイン情報にアクセスします。
DLL呼び出し時には必ず提供します。
提供するメソッドと使用方法は以下のファイルを参照してください。

sakura_core/plugin/CPluginIfObj.h
external/plugins/common/CExternalPluginIfObj.h

Editor

サクラエディタのエディタ情報にアクセスします。
DLL呼び出し時には必ず提供します。
提供するメソッドと使用方法は以下のファイルを参照してください。

sakura_core/macro/CEditorIfObj.h
external/plugins/common/CExternalEditorIfObj.h

Macro

サクラエディタのマクロ情報にアクセスします。
DLLマクロ呼び出し時に提供します。
提供するメソッドと使用方法は以下のファイルを参照してください。

sakura_core/macro/CMacroIfObj.h
external/plugins/common/CExternalMacroIfObj.h

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

サクラエディタのアウトライン情報にアクセスします。
DLLアウトライン呼び出し時に提供します。
提供するメソッドと使用方法は以下のファイルを参照してください。

sakura_core/plugin/COutlineIfObj.h
external/plugins/common/CExternalOutlineIfObj.h

SmartIndent

サクラエディタのスマートインデント情報にアクセスします。
DLLスマートインデント呼び出し時に提供します。
提供するメソッドと使用方法は以下のファイルを参照してください。

sakura_core/plugin/CSmartIndentIfObj.h
external/plugins/common/CExternalSmartIndentIfObj.h

Complement

サクラエディタの補完情報にアクセスします。
DLL補完呼び出し時に提供します。
提供するメソッドと使用方法は以下のファイルを参照してください。

sakura_core/plugin/CComplementIfObj.h
external/plugins/common/CExternalComplementIfObj.h

  • プラグイン仕様書にある[DLL]は[Dll]の誤りです。 -- 2013-04-14 (日) 18:47:17

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White
[添付ファイル一覧] [全ページの添付ファイル一覧]
アップロード可能最大ファイルサイズは 2,048KB です。

    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS