创建DllMain函数Windows共享库(MinGW的+ CMake的)(Create a Win

2019-10-22 13:08发布

我道歉,如果这已经被问过,但我一直在努力,现在找到了几个星期的答案。

我不是当涉及到共享库特别能干,但是使用CLion RC 1.0 (及其集成的CMake)与MinGW ,我一直无法创建一个功能的Windows DLLDllMain函数。 我还是设法创建.dll文件,但它很快就发现符号没有corrrectly出口。

简单地说,我希望看到相同或类似的行为什么是与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。

Answer 1:

检查出add_library文档: http://www.cmake.org/cmake/help/v3.0/command/add_library.html

“静态库链接其他目标时,是使用目标文件的档案。共享库动态链接,并在运行时加载。MODULE库未链接到其他目标的插件,但可使用dlopen一样的功能在运行时动态加载”

add_library(DllMainTest MODULE ${SOURCE_FILES})

要导出的DllMain如预期。



文章来源: Create a Windows shared library with DllMain function (MinGW + CMake)