创建新的动态链接库Dll项目
1.创建静态项目MathFunDll:
选择 win32项目->输入MathFunDll项目名称->下一步->选择DLL;选择附加选项的空项目->完毕。(当然也可以不选择附加选项空项目)
2.向动态库添加类MyMathFun:
MyMathFun.h
#pragma once // #ifdef DLLCLASS_API // #define DLLCLASS_API _declspec(dllimport) // #else // #define DLLCLASS_API _declspec(dllexport) // #endif #define DLLCLASS_API _declspec(dllexport) class DLLCLASS_API MyMathFun { public: MyMathFun(void); ~MyMathFun(void); double Add(double a, double b); double Substract(double a, double b); double Multiply(double a, double b); double Divide(double a, double b); };
MyMathFun.cpp
#include "MyMathFun.h" #include <stdexcept> using namespace std; MyMathFun::MyMathFun(void) { } MyMathFun::~MyMathFun(void) { } double MyMathFun::Add(double a, double b) { return a + b; } double MyMathFun::Substract(double a, double b) { return a - b; } double MyMathFun::Multiply(double a, double b) { return a*b; } double MyMathFun::Divide(double a, double b) { if (b == 0) { throw new invalid_argument("b cannot be zero!"); } return a / b; }
创建引用动态链接库的应用程序
1.创建引用动态链接库的控制台应用程序:
在同一个解决方案中添加项目MyExecRefsDll:选择 win32控制台应用程序->输入MyExecRefsDll项目名称->下一步->选择控制台应用程序;选择附加选项的空项目->完毕
2.1添加头文件目录,以便程序中包含的头文件存在(即可以找到):
项目,属性->C/C++->常规->附加包含目录:..\MathFunDll
或者是:项目属性->VC++目录->包含目录:..\MathFunDll
2.2添加.Dll文件引用
项目,引用->通用属性->框架和引用->添加引用->会出现MathFuncsDll的项目名称和项目目录->确定
或者是,添加库目录及附加库:项目,属性->连接器->常规->附加库目录:如$(OutDir)
项目,属性->连接器->输入->附加依赖项:MathFunDll.lib
且MathFunDll.dll必须与MyExecRefsDll.exe文件在同一个目录
#include <iostream> using namespace std; //当使用添加头文件目录,以便程序中包含的头文件存在(即可以找到): //1.项目,属性->C/C++->常规->附加包含目录:..\MathFunDll //2.#include "MyMathFun.h" 就可以省略下面的类的再次声明了 #define DLLCLASS_API _declspec(dllimport) class DLLCLASS_API MyMathFun { public: MyMathFun(void); ~MyMathFun(void); double Add(double a, double b); double Substract(double a, double b); double Multiply(double a, double b); double Divide(double a, double b); }; void main() { MyMathFun* mFun = new MyMathFun(); cout << mFun->Add(1, 2) << endl;//3 cout << mFun->Substract(3, 4) << endl;//-1 cout << mFun->Multiply(5, 6) << endl;//30 cout << mFun->Divide(7, 8) << endl;//0.875 int i = 0; cin >> i;//pause test }
注:此文与 创建和静态使用动态链接库dll 这篇文章几乎是一样的。