EmEditorのプラグインをVisual C++ 2005 Express Edition で作成する

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をコメントアウトする

#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

とします。

各関数の宣言に _stdcall を加える

...
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を修正する

resource.rcには以下のような修正をしてください。

//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h" //この行の先頭のコメントを外す

// Microsoft Visual C++ でリソースを編集する場合 #include "afxres.h" の行の
// コメントを取って下さい
// Borland C++ Compiler でコンパイルする時は #include "afxres.h" の行に
// コメントがないとエラーになります

ビルドする

Build.batを作成する

ファイルが少ないので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 で作成する

inserted by FC2 system