新建一个dll项目:
新建项目-win32,名字叫dll1,之后选择dll,其他都默认
会自动生成dll1.cpp,没有生成dll1.h,所以需要手动添加dll1.h
修改dll1.cpp和dll1.h如下
值得注意的是,对于需要导出的函数,在声明时,加上 __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获取函数地址即可调用对应函数
新建项目-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获取函数地址即可调用对应函数
本文介绍了在VC2010中创建DLL的步骤,包括手动添加头文件,定义导出函数,以及如何在其他项目中导入并使用这些函数。详细讲解了隐式调用DLL的方法,强调了在不同项目中使用DLL时需注意的库文件和头文件的处理。
1950

被折叠的 条评论
为什么被折叠?



