// ============================================================================= // dworld plugin 基本モジュール // ============================================================================= module plugin_main; import core.runtime; import std.c.stdio; import std.c.stdlib; import std.string; import std.stdio; import dworld.plugin; /** * プラグインのメインクラスをロードして返します. * 本メソッドは, dworld.plugin モジュールのメソッドとして下さい. */ export Plugin loadPlugin() { return new SamplePlugin(); } /** * Plugin メインクラス. */ class SamplePlugin : Plugin { /** * 本プラグインのメジャーバージョンを返します. * * Return: * Major バージョン */ public override int getMajorVersion() { return 1; } /** * 本プラグインのマイナーバージョンを返します. * * Return: * Minor バージョン */ public override int getMinorVersion() { return 0; } /** * プラグイン開始時に呼び出されます. * * Params: * context = プラグインコンテキスト */ public override void start(PluginContext context) { writefln("START PLUGIN"); } /** * プラグイン終了時に呼び出されます. * * Params: * context = プラグインコンテキスト */ public override void stop(PluginContext context) { writefln("STOP PLUGINS"); } } // ----------------------------------------------------------------------------- // 以下, Windows の場合の DllMain // ----------------------------------------------------------------------------- version (Windows) { import std.c.windows.windows; extern (Windows) BOOL DllMain(HINSTANCE hInstance, ULONG ulReason, LPVOID pvReserved) { switch (ulReason) { case DLL_PROCESS_ATTACH: debug { printf("DLL_PROCESS_ATTACH\n"); } Runtime.initialize(); break; case DLL_PROCESS_DETACH: debug { printf("DLL_PROCESS_DETACH\n"); } std.c.stdio._fcloseallp = null; // so stdio doesn't get closed Runtime.terminate(); break; case DLL_THREAD_ATTACH: debug { printf("DLL_THREAD_ATTACH\n"); } break; case DLL_THREAD_DETACH: debug { printf("DLL_THREAD_DETACH\n"); } break; default: } return true; } }