vs 编译动态库和使用动态库的几种方式

生成DLL

新建空项目,选择动态链接库(DLL),然后下一步填写项目名称,然后点击创建。
在这里插入图片描述
在这里插入图片描述
添加.def文件,导出函数MyAdd
在这里插入图片描述
在工程配置->链接器->输入->模块定义文件里填写 def文件名(否则dll不会有导出函数的信息)。
在这里插入图片描述

调用动态库的几种方式

  1. 直接用LoadLibrary函数加载。
    #include
    #include <windows.h>
    #include

using namespace std;

typedef int (*lpAddFunc)(int a, int b);

int main()
{
int c = 0;
HMODULE hmodule = LoadLibrary(L"CPPDLL.dll");
if (hmodule == NULL)
{
cout << “load library error” << endl;
return -1;
}
lpAddFunc addFunc = (lpAddFunc)GetProcAddress(hmodule, “MyAdd”);
if (addFunc == NULL)
{
cout << “GetProcAddress MyAdd error” << endl;
goto cleanup;
}

c = addFunc(1, 2);
cout << c << endl;
cout << “Hello World!\n”;
cleanup:
FreeLibrary(hmodule);
getchar();
return 1;
}

  1. 用lib文件和dll文件
    2.1 首先要在配置文件中添加包含目录
    在这里插入图片描述
    2.2 添加依赖项 lib文件(lib文件中含有一些函数信息,但是没有实现,只能让编译通过,exe运行还是需要dll文件,windows和linux的lib文件里的东西不一样,linux的lib含有所有信息),
    在这里插入图片描述
    2.3 添加lib库所在的目录。
    在这里插入图片描述

2.4 把相应版本的dll文件拷贝到exe生成的目录(vs默认是先查找当前exe所在的目录,一般大项目都是这样放,不会去配置里设置什么动态库的路径)
在这里插入图片描述

调用代码如下
#include
#include <windows.h>
#include “CPP_DLL.h”

using namespace std;

int main()
{
int c = MyAdd(1, 2);
cout << c << endl;
getchar();
return 1;
}

  1. 用#pragma comment (lib,“CPPDLL.lib”)
    把这一步替代上面2.2这一步,并且在代码中添加如下
    #include
    #include <windows.h>
    #include “CPP_DLL.h”
    #pragma comment (lib,“CPPDLL.lib”)

using namespace std;

int main()
{
int c = MyAdd(1, 2);
cout << c << endl;
getchar();
return 1;
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值