• dll的使用


          2016-12-11   23:02:24

          

    一:生成DLL

    1:创建DLL工程

          文件->新建->项目->visual c++->win32->win32控制台应用程序(win32项目也可以)

          填写项目名称MyDLL->确定->下一步->DLL(附加选项 对空项目打钩)->完成。

          到这里DLL工程就创建完毕了,下面新建两个文件MyDLL.cpp和MyDLL.h。

          MyDLL.cpp内容如下:

    #include<iostream>
    using namespace std; 
    #include "MyDLL.h" 
     
    int Add(int &a,int &b) 
    { 
        return a+b;
    }

     MyDLL.h内容如下:  (有的可能没有lib文件生成)

     extern "C" __declspec(dllexport) int Add(int &a,int &b); 

    在C++程序中使用刚才生成的DLL文件步骤:

    新建一个win32 控制台工程,取名testMyDLL,新建两个文件:testMyDLL.cpp和testMyDLL.h,

    首先需要 隐式链接采用静态加载的方式,比较简单,需要.h、.lib、.dll三件套。新建“控制台应用程序”或“空项目”。配置如下:(这一点非常重要)“三部曲”

     项目->属性->配置属性->VC++ 目录-> 在“包含目录”里添加头文件MyDLL.h所在的目录 

    项目->属性->配置属性->VC++ 目录-> 在“库目录”里添加头文件MyDLL.lib所在的目录 
    项目->属性->配置属性->链接器->输入-> 在“附加依赖项”里添加“MyDLL.lib”(若有多个 lib 则以空格隔开)

    testMyDLL.cpp内容如下:

    #include  
    using namespace std; 
     
    int main() 
    { 
        int a =3; 
        int b =2; 
        cout<<Add(a,b)<<endl; 
     
        getchar(); 
     }

    testMyDLL.h:

    extern "C" _declspec(dllexport) int Add(int &a, int &b);

     现在可以编译通过了,但是程序运行就报错,还需要将MyDLL.dll复制到当前项目生成的可执行文件所在的目录。(这一点非常重要)  否则缺少dll文件/

    注意:如果只有dll文件,那么必须在程序里面调用LoadLibrary()函数才能使用,如果有lib文件,那么有两种方式可以马上进行调用

    (1). Dependencies (推荐使用,要求有lib源代码)

       一个项目被分成多个工程来做,一个主工程exe,其他为静态库lib

        Project-->dependencies,设置主工程的依赖为其他静态库lib

        这时,主工程的Resource Files中自动添加了lib

        在主工程中需要用到其他库的位置加入库的头文件

    (2). 直接将lib添加到需要用的工程中(不太推荐,lib没能统一管理)

        提供了lib和其头文件

        选择工程-->右键-->Add Files to Project

        这时,主工程的Resource Files中自动添加了lib

        在主工程中需要用到其他库的位置加入库的头文件

    (3).  通过工程的Link设置(推荐,lib可以统一管理)

         提供了lib和其头文件

         Project-->settings-->Link,选择Categery中的Input

         在object/library modules里输入的动态链接库对应的.lib文件名

         在Additional library path中输入动态链接库对应的.lib的路径

         在主工程中需要用到其他库的位置加入库的头文件

    (4).  #pragma (lib, "filename.lilb")(不太推荐,lib没能统一管理)

          提供了lib和其头文件

          在主工程中需要用到其他库的位置加入#pragma (lib, "filename.lilb")

          在主工程中需要用到其他库的位置加入库的头文件:

     参考:  VS2013创建dll动态链接库文件心得

               使用VS2012生成DLL文件

  • 相关阅读:
    POJ 3169 Layout(差分约束+链式前向星+SPFA)
    HDU 2680 Choose the best route(SPFA)
    PAT L2-016 愿天下有情人都是失散多年的兄妹(深搜)
    PAT L2-013 红色警报(并查集求连通子图)
    PAT L2-014 列车调度(最长上升nlogn)
    PAT L3-010 是否完全二叉搜索树(二叉搜索树)
    HRBUST 2310 Tree Painting(无向图欧拉路径的性质)
    POJ 2230 Watchcow(有向图欧拉回路)
    UVa 10054 The Necklace(无向图欧拉回路)
    UVa 1600 Patrol Robot(三维广搜)
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/6160990.html
Copyright © 2020-2023  润新知