本文使用Visual Studio 2017, 通过win32控制台应用程序调用dll文件。
0. 新建工程
① 新建工程: 文件 -> 新建 -> 项目, 模板 -> VisualC++ -> Win32 控制台应用程序 -> 确定。应用程序向导配置如下:
② 在源文件中添加新建项创建main.cpp(解决方案资源管理器 -> 项目 -> 源文件 -> 右键添加新建项 -> VisualC++ -> C++文件)
③ 配置管理器中的平台需要和dll的位数保持一致(x86,x64)。
1. 静态调用
main.cpp 文件内容如下
#include <iostream>
void say_hello(); // 没有给出头文件,需要在此声明函数
int main()
{
say_hello();
return 0;
}
将生成的动态链接库dll,静态库lib,头文件h放到工程目录下
配置属性 -> C/C++ -> 常规 -> 附加包含目录 -> 编辑, 填写dll,lib,h所在的绝对路径或者相对路径。
配置属性 -> 链接器 -> 常规 -> 附加库目录 -> 编辑, 填写dll,lib,h所在的绝对路径或者相对路径。
配置属性 -> 链接器 -> 输入 -> 附加依赖项 -> 编辑, 填写lib文件的名称。
将dll文件复制到生成的可执行文件目录下
生成 -> 生成解决方案
调试->开始执行(不调试)
2. 动态调用
动态调用无需配置目录,链接器等信息。
只需要将dll与生成的可执行文件放在同一个文件夹下即可(或者将目录信息也加入LoadLibrary的参数中)
main.cpp 文件内容如下
#include <iostream>
#include <wtypes.h>
#include <Tchar.h>
// 定义函数指针
void (* say_hello)(void);
int main()
{
// 加载 动态链接库
HINSTANCE hInst = LoadLibrary(_T("say_hello.dll"));
// 获取函数
(FARPROC&)say_hello = GetProcAddress(hInst, "say_hello");
// 运行函数
say_hello();
// 释放DLL
FreeLibrary(hInst);
return 0;
}