1 
2 module dllexp;
3 version(unittest) {
4 } else {
5     version(DXX_Module) {
6 
7         import core.stdc.stdio : printf;
8         import std.experimental.logger;
9         import std.exception;
10         import dxx.constants;
11 
12         import dxx.sys.loader;
13 
14         extern(C):
15         void load( void* userdata ) {
16             debug(Module) {
17               sharedLog.info("[module] load");
18             }
19             Module.getInstance.load;
20         }
21 
22         void unload(void* userdata) {
23             debug(Module) {
24               sharedLog.info("[module] unload");
25             }
26             Module.getInstance.unload;
27         }
28 
29         void init(void* data) {
30             assert(data);
31             debug(Module) {
32               sharedLog.info("[module] init");
33             }
34 
35             auto moduleData = cast(shared(ModuleData)*)data;
36 
37             assert(moduleData.hostRuntime);
38 
39             Module.getInstance.moduleData = moduleData;
40             moduleData.moduleRuntime = &RTConstants.runtimeConstants;
41             enforce(moduleData.hostRuntime.checkVersion(RTConstants.constants.semVer));
42 
43             Module.getInstance.init;
44         }
45         void uninit(void* userdata){
46             Module.getInstance.moduleData = cast(shared(ModuleData)*) userdata;
47             debug(Module) {
48               sharedLog.info("[module] uninit");
49             }
50             Module.getInstance.deinit;
51         }
52 
53         void update() {
54             debug(Module) {
55               sharedLog.info("[module] update");
56             }
57             Module.getInstance.update;
58         }
59     }
60 }