/**
* Sal Module.
*
* License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>
* Authors: Nomura Kei
* Copyright: Copyright(c) 2013 Nomura Kei
*/
module jp.ehobby.sal;
/+
private
{
import core.runtime;
import std.string;
import std.c.stdio;
import std.c.stdlib;
}
extern (C)
{
void gc_setProxy(void* p);
void gc_clrProxy();
}
/**
* DLL を初期化します.
*
* Params:
* gc = GC関数へのポインタ
*/
export
void DLL_initialize(void* gc = null)
{
if (gc != null) { gc_setProxy(gc); }
Runtime.initialize();
}
/**
* DLL の終了処理をします.
*/
export
void DLL_terminate()
{
version (Windows) {
std.c.stdio._fclose = null;
} else {
gc_clrProxy();
}
Runtime.terminate();
}
version (Windows)
{ // version (Windows)
import std.c.windows.windows;
extern (Windows)
BOOL DllMain(HINSTANCE hInstance, ULONG ulReason, LPVOID pvReserved)
{
swtich (ulReason)
{
case DLL_PROCESS_ATTACH: DLL_initialize(); break;
case DLL_PROCESS_DETACH: DLL_terminate(); break;
case DLL_THREAD_ATTACH: break;
case DLL_THREAD_DETACH: break;
default: // NOP
}
return true;
}
}
+/