vc2010创建dll和使用

本文介绍了在VC2010中创建DLL的步骤,包括手动添加头文件,定义导出函数,以及如何在其他项目中导入并使用这些函数。详细讲解了隐式调用DLL的方法,强调了在不同项目中使用DLL时需注意的库文件和头文件的处理。
新建一个dll项目:
新建项目-win32,名字叫dll1,之后选择dll,其他都默认


会自动生成dll1.cpp,没有生成dll1.h,所以需要手动添加dll1.h
修改dll1.cpp和dll1.h如下

#include "stdafx.h"
#include "dll1.h"  
#include <stdexcept>  
using namespace std;  

namespace MathFuncs  
{  
	double MyMathFuncs::Add(double a, double b)  
	{  
		return a + b;  
	}  

	double MyMathFuncs::Subtract(double a, double b)  
	{  
		return a - b;  
	}  

	double MyMathFuncs::Multiply(double a, double b)  
	{  
		return a * b;  
	}  

	double MyMathFuncs::Divide(double a, double b)  
	{  
		if (b == 0)  
		{  
			throw invalid_argument("b cannot be zero!");  
		}  
		return a / b;  
	}  
}

#define  TESTDLL_EXPORTS
#ifdef TESTDLL_EXPORTS  
#define TESTDLL_API __declspec(dllexport)   
#else  
#define TESTDLL_API __declspec(dllimport)   
#endif  
namespace MathFuncs  
{  
	// This class is exported from the testdll.dll  
	class MyMathFuncs  
	{  
	public:   
		// Returns a + b  
		static TESTDLL_API double Add(double a, double b);

		// Returns a - b  
		static TESTDLL_API double Subtract(double a, double b);

		// Returns a * b  
		static TESTDLL_API double Multiply(double a, double b);

		// Returns a / b  
		// Throws const std::invalid_argument& if b is 0  
		static TESTDLL_API double Divide(double a, double b);
	};  
}

值得注意的是,对于需要导出的函数,在声明时,加上 __declspec(dllexport) 
然后在其他项目里面使用时,对应的声明加上 __declspec(dllimport)  

(也可以使用添加def文件的方法导出函数)
编译之后,在debug文件夹生成dll1.dll和dll1.lib


使用方法
拷贝dll1.h和dll1.lib和dll1.dll到其他工程的目录,同时把dll1.h里的宏TESTDLL_EXPORTS取消掉 #undef  TESTDLL_EXPORTS(其实不取消也可以用)
在使用的地方添加:
#include "dll1.h"
#pragma comment(lib,"dll1.lib")

调用函数:
int sum = MathFuncs::MyMathFuncs::Add(1, 2);
TRACE("sum = %d\n",sum);



附:c++调用dll的方式有两种,
一种就是本文使用的需要lib的这种,叫隐式调用,不仅需要dll文件,还需要对应的lib文件,即使用#pragma comment(lib,"xxx.lib")把lib文件也搞进来
另一种叫显式调用,不需要lib文件。只要使用LoadLibrary把dll加载到内存,再使用GetProcAddress获取函数地址即可调用对应函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值