あるフィルタプラグインのfunc_initより必ず先に実行する
基礎情報
auc,aui,auoは1つのファイルで1つのプラグインを登録できます
逆に「何も登録しない」はできません
つまりaufは「何も登録しない」ができます
aulは何もしなくても読んでくれます
aufの読み込みはdeco:ハイライト無効全ファイルのGetFilterTable[List]の呼び出し>各FILTERのfunc_init呼び出しです .aulを使う
ただし何もしなければ勝手にDLLを解放してしまうので, 困るならDllMainで自身をLoadLibraryしておきます
code:cpp
void Init() {
// ここでやりたいことをする
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
static bool loading_self = false;
switch(fdwReason) {
case DLL_PROCESS_ATTACH:
if(loading_self) break;
loading_self = true;
GetModuleFileNameA(hinstDLL, path, 260);
LoadLibraryA(path);
loading_self = false;
Init();
}
return TRUE;
}
aufを使う
プラグインとして登録しない
aufはGetFilterTableListが{nullptr}を返せば0個のプラグインを登録することができます
こちらはほっといても勝手に解放されることはありません(バグだろ)
code:cpp
void Init() {
// ここでやりたいことをする
}
FILTER_DLL* list[] = { nullptr };
FILTER_DLL** GetFilterTableList() {
Init();
return list;
}
プラグインとして登録する
設定できるプロパティを持たせたいならこっちのほうがよい?プラグインの数には上限があるので諸説
あとこの方法じゃないと当然正しくプラグインが読み込まれたかユーザーはわかりません
code:cpp
FILTER filter = { /* ... */ }:
bool inited = false;
void Init() {
// ここでやりたいことをする
}
BOOL func_init(FILTER* fp) {
if(!inited) {
Init();
inited = true;
}
/* ... */
}
FILTER_DLL* GetFilterTable() {
if(GetModuleHandleA(/* 対象のプラグインファイル名 */) != NULL) {
Init();
inited = true;
}
return &filter;
}
おわり
おわりです