如果已经提出这个问题,我道歉,但我已经试图找到答案已经好几周了。
对于共享库,我不是特别称职,但使用CLion RC 1.0
(及其集成的CMake)与MinGW
,我无法创建功能性的Windows DLL
具有DllMain
功能。我确实设法创建了一个.dll
文件,但很快就发现该符号没有正确导出。
简单地说,我希望看到与Visual Studio的默认Win32 DLL模板相同或类似的行为。
的CMakeLists.txt
cmake_minimum_required(VERSION 3.1)
project(DllMainTest)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
add_library(DllMainTest SHARED ${SOURCE_FILES})
的main.cpp
#include <windows.h>
extern "C" BOOL WINAPI DllMain(
HINSTANCE hinstDLL,
DWORD fdwReason,
LPVOID lpvReserved
) {
switch(fdwReason) {
case DLL_PROCESS_ATTACH:
MessageBox(NULL, "It works!", "Status", MB_OK);
case DLL_PROCESS_DETACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
default:
break;
}
return TRUE;
}
修改: 这个DLL的目的是将它注入到32位进程中,并在加载时显示MessageBox。
答案 0 :(得分:1)
查看add_library文档:http://www.cmake.org/cmake/help/v3.0/command/add_library.html
“STATIC库是链接其他目标时使用的目标文件的存档.SHARED库在运行时动态链接并加载.MODULE库是未链接到其他目标的插件,但可以在运行时使用类似dlopen动态加载功能“
add_library(DllMainTest MODULE ${SOURCE_FILES})
应按预期导出DllMain。