文章类型: VC&C++
关键词: 创建,静态,使用动态链接库,dll,win32编程
内容摘要: 创建和静态使用动态链接库dll

创建和静态使用动态链接库dll

2016/8/22 15:16:00    来源:apple    阅读:

使用Dll是一种重用代码的绝佳方式。 官网实例

创建新的动态链接库Dll项目

1.创建静态项目MathFucsDll:

选择 win32控制台应用程序->输入MathFuncsDll项目名称->下一步->选择DLL;选择附加选项的空项目->完毕

2.向动态库添加类MyMathFuncs:

#pragma  once  
//MyMathFuncs.h  
namespace MathFuncs  
{  
    class MyMathFuncs  
    {  
    public:  
        static _declspec(dllexport) double Add(double a,double b);  
        static _declspec(dllexport) double Substract(double a,double b);  
        static _declspec(dllexport) double Multiply(double a,double b);  
        static _declspec(dllexport) double Divide(double a,double b);  
    };  
}  
  
//MyMathFuncs.cpp  
#include "MyMathFuncs.h"  
#include <stdexcept>  
using namespace std;  
namespace MathFuncs  
{  
    double MyMathFuncs::Add(double a,double b)  
    {  
        return a+b;  
    }  
    double MyMathFuncs::Substract(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 new invalid_argument("b cannot be zero!");  
        }  
        return a/b;  
    }  
}

3.确认生成的是dll文件:项目,属性->配置属性,常规->配置类型:改为静动态库(.dll);编译生成MathFuncsDll.lib和MathFuncsDll.dll

创建引用动态链接库的应用程序

1.创建引用动态链接库的控制台应用程序:

在同一个解决方案中添加项目MyExecRefsDll:选择 win32控制台应用程序->输入MyExecRefsDll项目名称->下一步->选择控制台应用程序;选择附加选项的空项目->完毕

2.在应用程序中使用动态链接库的功能

2.1添加头文件目录,以便程序中包含的头文件存在(即可以找到):

项目,属性->C/C++->常规->附加包含目录:..\MathFuncsDll

或者是:项目属性->VC++目录->包含目录:..\MathFuncsDll

2.2添加.Dll文件引用

项目,引用->通用属性->框架和引用->添加引用->会出现MathFuncsDll的项目名称和项目目录->确定

或者是,添加库目录及附加库:项目,属性->连接器->常规->附加库目录:如$(OutDir)

                                                   项目,属性->连接器->输入->附加依赖项:MathFuncsDll.lib

                                                   且MathFuncsDll.dll必须与MyExecRefsDll.exe文件在同一个目录

//#include "Test.cpp"  
#include "MyMathFuncs.h"  
#include <stdexcept>  
using namespace std;
namespace MathFuncs  
{  
    double MyMathFuncs::Add(double a,double b)  
    {  
        return a+b;  
    }  
    double MyMathFuncs::Substract(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 new invalid_argument("b cannot be zero!");  
        }  
        return a/b;  
    }  
}

4.设置MyExecRefsDll为启动项目,按Ctrl+F5

比较Dll与Lib创建,引用过程中的不同

创建过程中的不同:Dll项目中的成员函数前添加了_declspec(dllexport),其生产~.lib和~.dll两者文件,而lib项目中只生产了~.lib文件

引用过程中的不同:Dll项目引用的过程与Lib项目引用的过程几乎完全一样(设置.h,.lib文件目录,和附加lib文件),唯一小小的区别就是:dll项目中生产的dll文件必须与引用者的.exe文件在同一个目录,而lib项目中却没有生产dll文件。

实例源代码下载: 实例源码下载(提取码:edb3)


↑ 上一篇文章:[DLL]在非MFC扩展Dll中导出类的简单例子 关键词:在非MFC扩展Dll中导出类的简单例子 发布日期:2016/8/22 14:52:09
↓ 下一篇文章:Visual Studio 2012 编译错误【error C4996: 'scanf': This function or variable may be unsafe. 】的解决方案 关键词:CRT,Security,Enhancements,in.. 发布日期:2016/8/22 17:06:20
相关文章:
VC动态创建控件之CButton类 关键词:VC动态创建控件之CButton类 发布日期:2017-01-24 22:15
VC++文件夹的创建和文件夹的删除总结 关键词:VC++文件夹的创建和文件夹的删除总结 发布日期:2017-01-05 15:16
VC++ MSXML创建XML文件以及对XML文档解析 关键词:VC++,MSXML创建XML文件以及对XML文档解析 发布日期:2016-08-23 09:41
相关目录:.NETVC&C++软件开发
我要评论
正在加载评论信息......