source_group("Src" FILES "${_VS_VERSION_FILE}")
endif()
endif()
+ if(WIN32 AND NOT ("${the_module}" STREQUAL "opencv_core" OR "${the_module}" STREQUAL "opencv_world")
+ AND (BUILD_SHARED_LIBS AND NOT "x${OPENCV_MODULE_TYPE}" STREQUAL "xSTATIC")
+ AND NOT OPENCV_SKIP_DLLMAIN_GENERATION
+ )
+ set(_DLLMAIN_FILE "${CMAKE_CURRENT_BINARY_DIR}/${the_module}_main.cpp")
+ configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/dllmain.cpp.in" "${_DLLMAIN_FILE}" @ONLY)
+ endif()
source_group("Include" FILES "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/cvconfig.h" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/opencv2/opencv_modules.hpp")
source_group("Src" FILES "${${the_module}_pch}")
"${OPENCV_CONFIG_FILE_INCLUDE_DIR}/cvconfig.h" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/opencv2/opencv_modules.hpp"
${${the_module}_pch}
${_VS_VERSION_FILE}
+ ${_DLLMAIN_FILE}
)
set_target_properties(${the_module} PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};Module")
set_source_files_properties(${OPENCV_MODULE_${the_module}_HEADERS} ${OPENCV_MODULE_${the_module}_SOURCES} ${${the_module}_pch}
--- /dev/null
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+#ifndef _WIN32
+#error "Build configuration error"
+#endif
+#ifndef CVAPI_EXPORTS
+#error "Build configuration error"
+#endif
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+#define OPENCV_MODULE_S "@the_module@"
+
+namespace cv {
+extern __declspec(dllimport) bool __termination; // Details: #12750
+}
+
+extern "C"
+BOOL WINAPI DllMain(HINSTANCE, DWORD fdwReason, LPVOID lpReserved);
+
+extern "C"
+BOOL WINAPI DllMain(HINSTANCE, DWORD fdwReason, LPVOID lpReserved)
+{
+ if (fdwReason == DLL_THREAD_DETACH || fdwReason == DLL_PROCESS_DETACH)
+ {
+ if (lpReserved != NULL) // called after ExitProcess() call
+ {
+ //printf("OpenCV: terminating: " OPENCV_MODULE_S "\n");
+ cv::__termination = true;
+ }
+ }
+ return TRUE;
+}
#define CL_RUNTIME_EXPORT
#endif
-extern bool __termination; // skip some cleanups, because process is terminating
- // (for example, if ExitProcess() was already called)
+extern CV_EXPORTS
+bool __termination; // skip some cleanups, because process is terminating
+ // (for example, if ExitProcess() was already called)
cv::Mutex& getInitializationMutex();