C++生成DLL导出函数的小demo

 
 
一、创建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"));
	//如果Dll加载失败,释放它占用的资源
	if (hm == NULL)
	{
		cout << "hm is null" << endl;
		::FreeLibrary(hm);
		return 0;
	}

	ADD add;
	MULTIPLY multiply;
	//取得目标Dll中导出函数的地址(提醒:函数名就是函数的入口地址) 
	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;
}
运行搞定。





你可能感兴趣的:(C++生成DLL导出函数的小demo)