EmEditor FAN ! / EmEditorのプラグインをVisual C++ 2005 Express Edition で作成する
2006/05/07
Microsoftが無償で提供しているC++統合開発環境(IDE) Visual C++ 2005 Express Editionに含まれるC++コンパイラで、 KKSoftwareさんが配布されているEmEditorプラグイン作 成用基礎ファイル生成ツールの生成するソースを元に、EmEditorのプラグインを作成する方法を紹介します。ここではIDEを使わず、コマンドラインでコンパイルします。
Visual C++ 2005 Express Editionをサイトの指示に従ってダウンロードし、インストールしてください。
Windows® Server 2003 SP1 Platform SDK(英語)からSDKをダウンロードして、インストールします。PSDK-*.exeの一覧があると思うので対応するもの(普通、PSDK-X86.exe)を選び右のDownloadをクリックして、ダウンロード、実行します。たくさんのインストールオプションがありますが、"Microsoft Windows Core SDK"以外は特に必要ありません。
コンパイル前に環境変数、PATH, INCLUDE, LIBを設定するためのバッチファイルを用意します。WindowsR Server 2003 SP1 Platform SDK には ATLとMFCも含まれていますので、ここにもパスを通しておきます。Include\MFCに含まれる afxres.h はりソースのコンパイルに必要です。setvc2005ex.bat という名前をつけて、パスの通っている場所(C:\Windows = %WINDIR%)にコピーしておきます。
@SET VCPATH=C:\Program Files\Microsoft Visual Studio 8\VC @SET IDEPATH=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE @SET SDKPATH=C:\Program Files\Microsoft Platform SDK @SET PATH=%VCPATH%\bin;%IDEPATH%;%SDKPATH%\bin;%PATH% @SET INCLUDE=%SDKPATH%\Include\atl;%SDKPATH%\Include\mfc;%VCPATH%\Include;%SDKPATH%\Include; @SET LIB=%VCPATH%\Lib;%SDKPATH%\Lib;
KKSoftwareさんが配布されているEmEditorプラグイン作成用基礎ファイル生成ツールをつかって雛形を作成してください。以下C:\HogePlugInディレクトリのHogePlugIn.cppファイルに雛形ソースがあるものとします。plugin.hもダウンロードして同じディレクトリにコピーしてください。 雛形はBorland C++ Compilerにあわせて書かれているので、 HogePlugIn.cppは以下のような修正が必要です。
#pragma hdrstop #include "resource.h" #include "plugin.h" #define EMEDITOR_API extern "C" HINSTANCE g_hInstance=NULL; UINT g_nCmdID=0; #pragma argsused
これを
//#pragma hdrstop #include "resource.h" #include "plugin.h" #define EMEDITOR_API extern "C" HINSTANCE g_hInstance=NULL; UINT g_nCmdID=0; //#pragma argsused
とします。
... BOOL APIENTRY DllMain(HINSTANCE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) ... EMEDITOR_API void OnCommand(HWND hwnd) ... EMEDITOR_API BOOL QueryStatus(HWND hwnd,LPBOOL pbChecked) ... EMEDITOR_API void OnEvents(HWND hwnd,UINT nEvent,LPARAM lParam) ... EMEDITOR_API UINT GetMenuTextID() ... EMEDITOR_API UINT GetBitmapID() ... EMEDITOR_API LRESULT PlugInProc(HWND hwnd,UINT nMsg,WPARAM wParam,LPARAM lParam) ...
を
... BOOL APIENTRY _stdcall DllMain(HINSTANCE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) ... EMEDITOR_API void _stdcall OnCommand(HWND hwnd) ... EMEDITOR_API BOOL _stdcall QueryStatus(HWND hwnd,LPBOOL pbChecked) ... EMEDITOR_API void _stdcall OnEvents(HWND hwnd,UINT nEvent,LPARAM lParam) ... EMEDITOR_API UINT _stdcall GetMenuTextID() ... EMEDITOR_API UINT _stdcall GetBitmapID() ... EMEDITOR_API LRESULT _stdcall PlugInProc(HWND hwnd,UINT nMsg,WPARAM wParam,LPARAM lParam) ...
に修正してください。"EMEDITOR_API\s+(\w+)\s+(\w+)"を"EMEDITOR_API \1 _stdcall \2"を正規表現で置換すると簡単に出来ると思います。
resource.rcには以下のような修正をしてください。
// // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" //この行の先頭のコメントを外す // Microsoft Visual C++ でリソースを編集する場合 #include "afxres.h" の行の // コメントを取って下さい // Borland C++ Compiler でコンパイルする時は #include "afxres.h" の行に // コメントがないとエラーになります
ファイルが少ないのでnmakeではなくてバッチファイルをつかってビルドします。 プラグインフォルダへのコピーも自動的に行うようにしてみました。
Set NAME=HogePlugIn del %NAME%.dll %NAME%.obj cl /Gr /nologo /EHsc /DNDEBUG /LD /O2 /c %NAME%.cpp rc resource.rc rem 必要に応じてライブラリ(.lib)を追加してください link /nologo /RELEASE /DLL /def:%NAME%.def %NAME%.obj resource.res user32.lib kernel32.lib copy /Y %NAME%.dll "C:\Program Files\EmEditor\PlugIns"
最後の一行はcopyではなくてInstallEmEditorPlugIn.exeを用いることもできます。
> cd "C:\HogePlugIn" C:\HogePlugIn> setvc2005ex.bat C:\HogePlugIn> build.bat
EmEditorのプラグインをVisual C++ Toolkit 2003 で作成するというページもあります。
EmEditor FAN ! / EmEditorのプラグインをVisual C++ 2005 Express Edition で作成する