dll_root.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <application/base_application.h>
00018 #include <basis/utf_conversion.h>
00019 #include <structures/static_memory_gremlin.h>
00020
00021
00022
00023
00024 #ifdef _AFXDLL
00025
00026 #ifdef DEBUG
00027 #define TRACE_PRINTER(s) TRACE_PRINT(s)
00028 #else
00029 #define TRACE_PRINTER(s)
00030 #endif
00031
00032
00033
00034 #include <afxext.h>
00035 #include <afxdllx.h>
00036
00037 bool check_DLL_versions();
00038
00039
00040 static AFX_EXTENSION_MODULE SomeDLL = { NULL, NULL };
00041
00042 #ifndef DLL_NAME
00043 #define DLL_NAME "unnamed DLL"
00044 #endif
00045
00046 extern "C" int APIENTRY
00047 DllMain(application_instance instance, DWORD reason, LPVOID reserved)
00048 {
00049 SET_INSTANCE_HANDLE(instance);
00050
00051 UNREFERENCED_PARAMETER(reserved);
00052
00053 char *dll_name = DLL_NAME;
00054
00055
00056
00057 static CDynLinkLibrary *dll_link = NIL;
00058
00059 static int dll_entry_count = 0;
00060
00061 switch (reason) {
00062 case DLL_PROCESS_ATTACH: {
00063 char *message = DLL_NAME " Initializing!\n";
00064 TRACE_PRINTER(message);
00065
00066 if (!check_DLL_versions()) return 0;
00067
00068
00069 if (!AfxInitExtensionModule(SomeDLL, instance)) return 0;
00070
00071
00072 dll_link = new CDynLinkLibrary(SomeDLL);
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 ++dll_entry_count;
00083 break;
00084 }
00085 case DLL_PROCESS_DETACH: {
00086 --dll_entry_count;
00087 char *message = DLL_NAME " Terminating!\n";
00088 TRACE_PRINTER(message);
00089
00090 WHACK(dll_link);
00091
00092 AfxTermExtensionModule(SomeDLL);
00093 break;
00094 }
00095 case DLL_THREAD_ATTACH:
00096 ++dll_entry_count;
00097 break;
00098 case DLL_THREAD_DETACH:
00099 --dll_entry_count;
00100 break;
00101 default:
00102
00103 break;
00104 }
00105
00106 return 1;
00107 }
00108
00109 #elif defined(__WIN32__)
00110
00111
00112
00113 #include <application/windoze_helper.h>
00114
00115 bool check_DLL_versions();
00116
00117
00118 BOOL APIENTRY DllMain(HANDLE module, DWORD ul_reason_for_call, LPVOID reserved)
00119 {
00120 SET_INSTANCE_HANDLE((application_instance)module);
00121 switch (ul_reason_for_call) {
00122 case DLL_PROCESS_ATTACH:
00123 if (!check_DLL_versions()) return 0;
00124 break;
00125
00126
00127 case DLL_THREAD_ATTACH:
00128 case DLL_THREAD_DETACH:
00129 case DLL_PROCESS_DETACH:
00130 break;
00131 }
00132 return true;
00133 }
00134
00135 #endif
00136