Windows 下 的静态库和动态库

   一、静态函数库(Lib)

     1. 静态函数库的制作(C/C++)

       —— 打开新建项目,然后选中Win32项目,接着在创建项目中选择 Lib,再接着将函数、实现功能的代码写入文件中,最后点击生成 目标文件 (.lib文件)

       —— 生成的目标文件(Lib)默认在解决方案中的Debug目录下  

     2 . 静态函数库的调用

       在Win32项目中调用步骤如下:

          i. 声明调用目标函数

          ii. 给链接器 指定链接库的 类型、库相对位置   —— #pragma comment(lib,''../Debug/CLib.lib'')

  二、动态函数库(Dll)

    1. 动态函数库的制作(C/C++)

      —— 打开新Win32项目,选中Dll 选项,向目标文件写 函数实现代码,最后点击生成

        制作动态库步骤:

            i. 创建动态库项目

            ii. 添加库程序

            iii. 库程序导出   ——   declspec(dllexport) + 库函数

      —— 生成的动态库位置在解决方案中Debug目录下

    2. 动态库的使用

      i. 声明并导入动态库函数  —— declspec(dllimport)+ 库函数

       链接时会生成相应的静态库文件,保存着函数中的编号, 方便能够准确找到函数

      ii. 导入函数库 —— #pragma comment(lib,"../Debug/CppLib.lib") //编译器去静态库找编号

      iii. 在程序中使用函数

      iv. —— 隐式链接的情况,Dll文件可以放在以下路径中

        1. 与执行文件 在同一个目录下

        2. 当前工作目录

        3. Windows目录

        4. Windows/System32目录

        5.Windows/System

        6.环境变量PATH指定目录

      —— 显示链接

        链接步骤:

        1. 定义函数指针类型 typedef

         typedef  int (*DLL_ADD) (int m,int n);

        2. 加载动态库

         HMODULE LoadLibrary(LPCTSTR lpFileName  //动态库路径);返回dll的实例句柄(HINSTANCE))

        3. 获取函数地址

         FARPROC GetProcAddress(HMODULE hModule// Dll句柄, LPCSTR lpProcName//函数名); 成功返回函数地址

        4.使用函数

        5. 卸载动态库

        BOOL FreeLibrary(HMODULE  hModule);        

        

        导出类

     头文件:

        #ifndef __DLLCLASS_H

        #define __DLLCLASS_H

        #ifdef DLLCLASS_EXPORTS

        #define EXT_CLASS  _declspec(dllexport)

        #else

        #define EXT_CLASS  _declspec(dllimport)

        #endif        

        class EXT_CLASS CMath {  };

    cpp文件

        #define  DLLCLASS_EXPORTS

        #include "DllClass.h"

        int CMath::Add (int num1, int num2);

    应用程序要运行动态库里的文件,会先检查所需文件是否能够找到并无错误,再才会跑起应用程序

    

      

    

  

Win32中 DLL、Lib 库的创建机器使用的更多相关文章

  1. VS2010中添加lib库引用

    VS2010中添加lib库引用: 1 菜单  项目---> 属性--->配置属性-->链接器---->输入---附加依赖项,  加入库名,如: my_API.lib; 或是在c ...

  2. [转]用多线程方法实现在MFC/WIN32中调用OpenGL函数并创建OpenGL窗口

    原文链接: 1.用多线程方法实现在MFC/WIN32中调用OpenGL函数并创建OpenGL窗口 2.Windows MFC 两个OpenGL窗口显示与线程RC问题

  3. DLL动态库的创建,隐式加载和显式加载

    动态库的创建 打开VS,创建如下控制台工程,工程命名为DllTest: 在弹出的对话框中选择"DLL"后单击"完成"按钮: 在工程中新建DllTest.h和Dl ...

  4. 在VS中添加lib库的三种方法

    注意: 1.每种方法也要复制相应的DLL文件到相应目录,或者设定DLL目录的位置,具体方法为:"Properties" -> "Configuration Prop ...

  5. 45.QT-连接外部dll,lib库导入问题

    dll库问题 查看MZ_Card.dll对应的文档手册,如下图所示: 所以代码写为: typedef BOOL (*Fun)(BOOL IsOpenComm,unsigned long Port, u ...

  6. 在vs2005中添加lib库的方法

    方法一:在用到lib的地方加上  //强烈推荐这种方法.#pragma    comment(lib,"libname.lib") 方法二:     点击菜单命令 “项目/属性”, ...

  7. lib库dll库的使用方法与关系

    一.lib库 lib库有两种:一种是静态lib(static Lib),也就是最常见的lib库,在编译时直接将代码加入程序当中.静态lib中,一个lib文件实际上是任意个obj文件的集合,obj文件是 ...

  8. vs2008设置dll、lib库的输出路径

    vs2008中,有些项目上的功能是要生产库文件给其他项目调用的,以下是一些设置库文件(x.dll和x.lib)输出路径的方法. 设置x.dll 输出路径方法是在右键项目的"属性"- ...

  9. MFC中的DLL、LIb文件的创建、使用

     动态链接库Dynamic-Linked Lib 的创建与使用 动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),是微软公司在微软 ...

随机推荐

  1. [Java] 实验6參考代码

    1. 大家的.java程序都须要在一个"缺省包"(default package)下编写\执行\提交,不要去命名新的package     - 系统不支持package contr ...

  2. 一个APP爆炸的时代,假设没有wifi

    我们每天都离不开的微信,又传来了一个新消息.你造?微信公众平台新增了设备功能.眼下可支持可穿戴设备,将来呢,前景不可限量!能够想象,"后果"是我们越来越离不开微信,依附于它.这样的 ...

  3. charts柱状图,定时刷新

    option: var dataoptionone = { title : { text: '数据存储情况', subtext: '数据表', x:'center' }, tooltip: { sho ...

  4. ubuntu16.04 Flume 安装

    Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据:同时,Flume提供对数据进行简单处理,并 ...

  5. javamail - 协议SMTP\IMAP\POP3设置

    资料来自:https://www.tutorialspoint.com/javamail_api/index.htm [SMTP - Simple Mail Transfer Protocol] Na ...

  6. [App Store Connect帮助]三、管理 App 和版本(1)添加 App 至您的帐户

    在向 App Store Connect 上传您 App 的构建版本之前,您必须先在您的 App Store Connect 帐户内新建一个 App. 如果您想将 iOS App 和 Apple TV ...

  7. [Apple开发者帐户帮助]九、参考(6)支持的功能(watchOS)

    watchOS扩展可用的功能取决于您的程序成员身份. 注意:对于watchOS应用程序目标,可用的功能是应用程序组和后台模式,并且不依赖于您的程序成员身份. 能力 ADP 企业 Apple开发者 应用 ...

  8. 题解报告:hdu 1863 畅通工程

    Problem Description 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可 ...

  9. linux如何更改yum源

    更改linux yum源方法:第一步:进入yum配置文件目录:cd /etc/yum.repos.d/第二步:备份配置文件(如果后续出现了问题就可以恢复):mv CentOS-Base.repo Ce ...

  10. c++ 四种类型转换机制

    类型转换机制可以分为:隐式类型转换 和 显示类型转换(强制类型转换) C中的类型转换: 事情要从头说起,这个头就是C语言.我们已经习惯了使用C-like类型转换,因为它强大而且简单. 主要有一下两种形 ...