EmEditor FAN ! / EmEditorのプラグインをVisual C++ Toolkit 2003 で作成する
2005/03/12
Microsoftが無償で提供しているC++コンパイラ Visual C++ Toolkit 2003でKKSoftwareさんが配布されているEmEditorプラグイン作成用基礎ファイル生成ツールの生成するソースを元にEmEditorのプラグインを作成する方法を紹介します。
Visual C++ Toolkit + Platform SDK のインストールとテストを参考に、Visual C++ Toolkit 2003とPlatform SDKをセットアップしてください。なぜかXP SP2 用のPlatform SDKにはnmake, cvtresが含まれていないので、February 2003のSDKをインストールするようにしてください。参考に私のSETVCTK.BATの中身です。
@SET VCPATH=C:\Program Files\Microsoft Visual C++ Toolkit 2003 @SET SDKPATH=C:\Program Files\Microsoft SDK @SET PATH=%VCPATH%\bin;%SDKPATH%\bin;%SDKPATH%\bin\Win64;%PATH% @SET %SDKPATH%\Include\Win64\atl;;%SDKPATH%\Include\Win64\mfc;%VCPATH%\Include;%SDKPATH%\Include; @SET LIB=%VCPATH%\Lib;%SDKPATH%\Lib;%SDKPATH%\Lib\Win64;
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) ...
に修正してください。(後に知ったのですがコンパイルオプションに/Gzをつけるとこの変更はいらなくなるようです。)
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 /Gz /nologo /EHsc /DNDEBUG /LD /O2 /c %NAME%.cpp rc /L 0x411 resource.rc 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を用いることもできます。
Visual C++ Toolkit + Platform SDK のインストールとテストを参考にsetvctk.batを作成するのを忘れないでください。
> cd "C:\HogePlugIn" C:\HogePlugIn> setvctk C:\HogePlugIn> build.bat
EmEditor FAN ! / EmEditorのプラグインをVisual C++ Toolkit 2003 で作成する