zoukankan      html  css  js  c++  java
  • Win32中 DLL、Lib 库的创建机器使用

    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);

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

        

          

        

      

  • 相关阅读:
    UVA1349 Optimal Bus Route Design 最优巴士路线设计
    POJ3565 Ants 蚂蚁(NEERC 2008)
    UVA1663 Purifying Machine 净化器
    UVa11996 Jewel Magic 魔法珠宝
    NEERC2003 Jurassic Remains 侏罗纪
    UVA11895 Honorary Tickets
    gdb调试coredump(使用篇)
    使用 MegaCLI 检测磁盘状态并更换磁盘
    员工直接坦诚直来直去 真性情
    山东浪潮超越3B4000申泰RM5120-L
  • 原文地址:https://www.cnblogs.com/Kernel001/p/8040723.html
Copyright © 2011-2022 走看看