一、创建DLL
1.生成DLL文件,导出函数,一般有两种方法,一种是在函数声明前面加上__declspec(dllexport),另一种是用def文件来动态导出函数。这篇写一个用def导出函数的小demo。
2.创建makedll文件。
(1).makedll.h
- #define MATHFUNCSDLL_EXPORTS
- #ifdef MATHFUNCSDLL_EXPORTS
- #define MATHFUNCSDLL_API __declspec(dllexport)
- #else
- #define MATHFUNCSDLL_API __declspec(dllimport)
- #endif
-
-
- extern "C"
- {
-
- MATHFUNCSDLL_API int multiply(int a, int b);
-
- MATHFUNCSDLL_API int add(int c, int d);
- }
makedll.cpp
- #include<makedll.h>
-
- extern "C"
- {
- MATHFUNCSDLL_API int multiply(int a, int b)
- {
- return a*b;
- }
- MATHFUNCSDLL_API int add(int c, int d)
- {
- return c + d;
- }
- }
3.然后在菜单栏选择“项目”——“添加新项”——vc++节点中的代码——模块定义文件(.def),输入def文件名,我输入的makedll.def确定。
makedll.def文件内容如下:
LIBRARY makedll
EXPORTS
multiply
add
LIBRARY 后面是要生成的DLL文件名,EXPORTS下面是要导出的函数的名字(只有名字)
4.生成解决方案。
二、使用DLL
1.新建项目usedll,来调用导出的函数。
2.将项目makedll生成的makedll.dll拷入usedll项目中,
3.main.cpp
- #include<iostream>
- #include<Windows.h>
- using namespace std;
-
- typedef int(*ADD)(int a,int b);
- typedef int(*MULTIPLY)(int a, int b);
-
- int main()
- {
- HMODULE hm = ::LoadLibrary(TEXT("makedll.dll"));
-
- if (hm == NULL)
- {
- cout << "hm is null" << endl;
- ::FreeLibrary(hm);
- return 0;
- }
-
- ADD add;
- MULTIPLY multiply;
-
- add = (ADD)::GetProcAddress(hm, "add");
- if (add == NULL)
- {
- cout << "add is null" << endl;
- ::FreeLibrary(hm);
- }
- multiply = (MULTIPLY)::GetProcAddress(hm, "multiply");
-
- cout << add(1,3) << endl;
- cout << multiply(2, 4) << endl;
- ::FreeLibrary(hm);
-
- return 0;
- }
运行搞定。