zoukankan      html  css  js  c++  java
  • Windows下VS2013创建与使用动态链接库(.dll)

    一、创建动态链接库文件

    ** 
    1、打开VS2013,选择文件,新建工程 
    这里写图片描述

    2、选择新建W32控制台应用程序,这里将工程名改为makeDLL 
    这里写图片描述

    3、在应用程序类型中选择DLL,点击完成 
    这里写图片描述

    4、完成以上步骤后,项目中会生成下列文件 
    这里写图片描述

    5、下面创建自己编写的函数,以简单的求和函数add为例,首先在添加头文件createdll.h,createdll.h中的代码如下:

    #ifndef CREARDLL_H_
    #define CREARDLL_H_
    
    _declspec(dllexport) int add(int x, int y);/*_declspec(dllexport)声明一个导出函数,是说这个函数要从本DLL导出,我要给别人用。*/
    int add(int x, int y);  //求和函数
    
    #endif

    6、添加createdll.cpp文件,里面是对add函数的具体定义,如下所示

    #include"stdafx.h"  //注意不要忘了添加这个头文件
    #include"creatdll.h"
    #include<iostream>
    
    int add(int x, int y)
    {
        return x + y;
    }

    #include"stdafx.h" //注意不要忘了添加这个头文件#include"creatdll.h"#include<iostream>int add(int x, int y) { return x + y; }

    7、最终项目中所有文件如下: 
    这里写图片描述

    8、选择生成解决方案,即可在项目中生成exe文件的Debug文件夹中得到makeDLL.dll和makeDLL.lib两个文件。 
    这里写图片描述

    对于生成的lib文件有如下解释: 
    如果有 dll 文件, 那么 lib 一般是一些索引信息, 记录了 dll 中函数的入口和位置, 
    dll 中是函数的具体内容;如果只有 lib 文件,那么这个 lib 文件是静态编译出来 
    的,索引和实现都在其中。使用静态编译的 lib 文件,在运行程序时不需要再挂 
    动态库,缺点是导致应用程序比较大,而且失去了动态库的灵活性。

    **

    二、使用动态链接库文件

    ** 
    1、新建一个空项目,命名为testDLL,将上面生成的makeDLL.lib文件放到项目的存放代码的路径下,makeDLL.dll放到项目中生成exe文件的Debug文件夹中。

    2、在项目中添加程序testdll.cpp,代码如下:

    #include<iostream>
    #pragma comment(lib,"makeDLL.lib")
    
    _declspec(dllimport) int add(int x, int y); //_declspec(dllimport)声明一个导入函数,是说这个函数是从别的DLL导入,我要用。
    
    int main()
    {
        std::cout << "2 + 3 = " << add(2, 3) << std::endl;
    
        std::cin.get();
        return 0;
    }

    #include<iostream>#pragma comment(lib,"makeDLL.lib") _declspec(dllimport) int add(int x, int y); //_declspec(dllimport)声明一个导入函数,是说这个函数是从别的DLL导入,我要用。int main() { std::cout << "2 + 3 = " << add(2, 3) << std::endl; std::cin.get(); return0; }

    3、完成以上步骤即可看到输出结果如下,说明testDLL项目成功调用了makeDLL.dll里的求和函数add。 
    这里写图片描述

    #include<iostream>#pragma comment(lib,"makeDLL.lib") _declspec(dllimport) int add(int x, int y); //_declspec(dllimport)声明一个导入函数,是说这个函数是从别的DLL导入,我要用。int main() { std::cout << "2 + 3 = " << add(2, 3) << std::endl; std::cin.get(); return0; }

  • 相关阅读:
    TAM安装需求和过程
    【转】OpenCV灰色直方图
    【原】Windows编程中的字符集编码格式及_T宏的解释
    【转】拷贝构造函数/深拷贝/浅拷贝
    【转】OpenCV实现KNN算法
    【原】opencv中cvCopy()和cvCloneImage()的区别:
    【转】数据挖掘十大经典算法KNN
    【原】函数返回一个指针以及返回STL对象的问题
    【原】关于c中int a=1; int b=a类型问题的思考
    【转】AfxMessageBox、MessageBox、::MessageBox的区别
  • 原文地址:https://www.cnblogs.com/ransn/p/8059151.html
Copyright © 2011-2022 走看看