空のプラグインの作成
BeckyPluginライブラリを使ってプラグインを開発する場合、必ず実施すべきいくつかの手順があります。
ここでは、それらの手順を順に実行して何もしないプラグインを作ってみます。
この手順は、プラグイン開発の際に必ず必要です。
ロジッククラスを作成
プロジェクトを右クリックして「追加」-「クラス」でプラグインのメインロジッククラスを作成します。
ここでは「SampleLogic」というクラス名にしました。
このとき、「SPluginLogic」を基底クラスにしてください。
インクルードの設定が未完了なので、基底クラスがないよ、と警告が出ますが、「はい」を選んでください。
dllmain.cpp の変更
ソリューションエクスプローラの dllmain.cpp を開き以下通りコードを編集します。
diimain.cpp の内容(丸ごとコピーしても構いません)
ロジッククラス名の部分だけ「SampleLogic」に変更します。
#include <PluginEntry.h>
#include "XXXXLogic.h"
// プログラムアタッチ処理
BOOL OnProcessAttach( HMODULE Module_ );
// プログラムデタッチ処理
BOOL OnProcessDetach();
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
OnProcessAttach( hModule );
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
OnProcessDetach();
break;
}
return TRUE;
}
// プログラムアタッチ処理
BOOL OnProcessAttach( HMODULE Module_ )
{
g_hInstance = Module_;
Logic = NULL;
// バージョン情報以外の初期化コードを OnStart に移動
if (!BeckyAPI.InitAPI() )
{
return FALSE;
}
// プラグインロジックを実装
Logic = new XXXXLogic(Module_, &BeckyAPI);
return TRUE;
}
// プログラムデタッチ処理
BOOL OnProcessDetach()
{
if( Logic != NULL )
{
delete Logic;
Logic = NULL;
}
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////////////////////
// 次のモジュールが必要になるので、記載しておく
int WINAPI BKC_OnMenuInit( HWND hWnd, HMENU hMenu, int nType )
{
return 0;
}
ロジッククラスの編集
ロジッククラスの基底クラスでは
Becky!のプラグインのコールバックが「なにもしない」状態で組み込んであります。
プラグインでは、Backy! からのコールバックで必要なモジュールをオーバーライドして実装していきます。
コールバック関数の中で、必ず実装しなければならないのは OnPlugInInfo 関数です。
SampleLogic クラスに OnPlugInInfo をオーバーライドして実装します。
SampleLogic.h
#pragma once
#include <PluginLogic.h>
class SampleLogic :
public SPluginLogic
{
virtual int OnPlugInInfo(LPBKPLUGININFO plugininfo);
public:
SampleLogic(HMODULE module, CBeckyAPI *beckyApi);
~SampleLogic();
};
SampleLogic.cpp
#include "SampleLogic.h"
SampleLogic::SampleLogic(HMODULE module, CBeckyAPI *beckyApi)
:SPluginLogic(module, beckyApi)
{
}
SampleLogic::~SampleLogic()
{
}
int SampleLogic::OnPlugInInfo(LPBKPLUGININFO plugininfo)
{
strcpy_s(plugininfo->szPlugInName, sizeof(plugininfo->szPlugInName), "プラグイン名");
strcpy_s(plugininfo->szVendor, sizeof(plugininfo->szVendor), "ベンダー名");
strcpy_s(plugininfo->szVersion, sizeof(plugininfo->szVersion), "バージョン番号");
strcpy_s(plugininfo->szDescription, sizeof(plugininfo->szDescription), "説明文");
return 0;
}
プラグイン名やバージョンなどは、文字列なら何でもいいみたいです。
実行してみます
ここまででプロジェクトを Debug ビルドしてみます。
コンパイルエラーやリンクエラーが出た場合は、これまでの手順を再度確認してください。
ビルドに成功すると、プロジェクトの Debug フォルダに SamplePlugin.dll ができています。
※デバッグ版の場合、pdbファイルがないと警告が出ますがリンクには問題ありません。
実行中のBecky!を終了させて、このSamplePlugin.dllをBecky!のインストールフォルダ(通常は C:\Program Files\RimArts\B2\ または C:\Program Files (x86)\RimArts\B2\ の Plugins フォルダにコピーして、Becky! を実行してみます。
初回起動時に、プラグインが認識されたよ、画面が表示されます。
何にもしないプラグインなので、ここは「キャンセル」しておいて、PluginsフォルダにコピーしたDLLも削除してしまいましょう。