一、dll生成
1、设置项目属性:打开vs,建立空项目,在项目的 配置属性->常规->项目默认值->配置类型 修改为:动态库(.dll)
2、准备文件:填写头文件和源文件,注意头文件的声明,源文件正常。
—————————————————————————————————————
| 头文件: |
| // __declspec详解请见https://blog.csdn.net/zhangzq86/article/details/52982939/ |
| #define DLLEXPORT __declspec(dllexport) |
| |
| extern "C" |
| { |
| DLLEXPORT void print_sss(string &sss); |
| } |
—————————————————————————————————————
3. 配置管理器(如Debug\x64),生成解决方案。
4. 在相应的项目文件夹下查看.dll、.lib文件,连同头文件.h一起拷贝到容易寻找的位置。
二、dll使用
使用方法一(尽可能少地配置项目属性)
1、建立项目,完成代码编写;
2、拷贝文件,将.lib .h文件拷贝到.cpp的同级目录
3、设置项目属性,配置属性->链接器->输入->附加依赖项 中填入.lib文件完整的文件名
4、生成解决方案
5、拷贝文件,将.dll文件拷贝到.exe文件的同级目录
6、运行程序。
三、CMAKE生成动态链接库dll
1.建立空的文件和目录: 新建文件夹(主文件夹),并在其中建立main.cpp和lib文件夹,
在lib文件夹下,准备头文件(mydll.h)和源文件(mydll.cpp),
同时在两级文件夹下都建立Cmakelists.txt;
2.准备好mydll.h,mydll.cpp和main.cpp;
3.准备Cmakelists.txt文件:
(1)先准备lib文件下的Cmakelists.txt
===============================================
#设置目录
SET(LIBSRC ./my_dll.h ./my_dll.cpp)
SET(LIBRARY_OUTPUT_PATH ../libdll)
# 第一个参数为你需要构建的dll的名字,第二个为类型
ADD_LIBRARY(add SHARED ${LIBSRC})
INSTALL(TARGETS add)
# 为dll设置linker
# 指定dll的生成目录,这里是:../libdll
#指定dll名称和前缀
SET_TARGET_PROPERTIES(add PROPERTIES LINKER_LANGUAGE C
RUNTIME_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH}
LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH}
OUTPUT_NAME "add"
PREFIX "")
===============================================
(2)再准备主目录下的Cmakelists.txt
===============================================
cmake_minimum_required(VERSION 3.16)
#项目名称
project(run_dll)
# 版本
set(CMAKE_CXX_STANDARD 17)
# 声明引入子项目(目录)
ADD_SUBDIRECTORY(lib)
#生成可执行文件
add_executable(run_dll run_dll.cpp)
#拷贝.dll文件到.exe所在的同级目录下
execute_process( COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/libdll/Debug/add.dll ${CMAKE_CURRENT_SOURCE_DIR}/Debug)
#链接库
target_link_libraries(${PROJECT_NAME} PUBLIC ./libdll/Debug/add)
#包含头文件
target_include_directories(${PROJECT_NAME} PUBLIC
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/lib>
$<INSTALL_INTERFACE:include>)
===============================================
4.在CMAKE中配置、生成项目文件;
5.在VS中运行。