生成DLL
新建空项目,选择动态链接库(DLL),然后下一步填写项目名称,然后点击创建。
添加.def文件,导出函数MyAdd
在工程配置->链接器->输入->模块定义文件里填写 def文件名(否则dll不会有导出函数的信息)。
调用动态库的几种方式
- 直接用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;
}
- 用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;
}
- 用#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;
}