summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/DLLMain.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/DLLMain.cpp')
-rw-r--r--cpp/src/Ice/DLLMain.cpp24
1 files changed, 22 insertions, 2 deletions
diff --git a/cpp/src/Ice/DLLMain.cpp b/cpp/src/Ice/DLLMain.cpp
index 125e5f799dd..7c07fef0b9a 100644
--- a/cpp/src/Ice/DLLMain.cpp
+++ b/cpp/src/Ice/DLLMain.cpp
@@ -23,11 +23,18 @@ DllMain(HINSTANCE hDLL, DWORD reason, LPVOID reserved)
#else
ice_DLL_Main(HINSTANCE hDLL, DWORD reason, LPVOID reserved)
{
- if(!_CRT_INIT(hDLL, reason, reserved))
+ //
+ // During ATTACH, we must call _CRT_INIT first.
+ //
+ if(reason == DLL_PROCESS_ATTACH || reason == DLL_THREAD_ATTACH)
{
- return FALSE;
+ if(!_CRT_INIT(hDLL, reason, reserved))
+ {
+ return FALSE;
+ }
}
#endif
+
if(reason == DLL_PROCESS_ATTACH)
{
Ice::EventLoggerI::setModuleHandle(hDLL);
@@ -38,6 +45,19 @@ ice_DLL_Main(HINSTANCE hDLL, DWORD reason, LPVOID reserved)
Ice::ImplicitContextI::cleanupThread();
}
+#ifndef __BCPLUSPLUS__
+ //
+ // During DETACH, we must call _CRT_INIT last.
+ //
+ if(reason == DLL_PROCESS_DETACH || reason == DLL_THREAD_DETACH)
+ {
+ if(!_CRT_INIT(hDLL, reason, reserved))
+ {
+ return FALSE;
+ }
+ }
+#endif
+
return TRUE;
}