EmEditorのプラグインをVisual C++ Toolkit 2003 で作成する

EmEditor FAN ! / EmEditorのプラグインをVisual C++ Toolkit 2003 で作成する

2005/03/12

Microsoftが無償で提供しているC++コンパイラ Visual C++ Toolkit 2003KKSoftwareさんが配布されている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をコメントアウトする

#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)
...

に修正してください。(後に知ったのですがコンパイルオプションに/Gzをつけるとこの変更はいらなくなるようです。)

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 /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 で作成する

inserted by FC2 system