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

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

        

          

        

      

  • 相关阅读:
    谈谈node(1)
    怎么调用html5的摄像头,录音,视频?
    es6-块级作用域let 和 var的区别
    输入手机号自动分隔
    How do I know which version of Javascript I'm using?
    PHP的类中的常量,静态变量的问题。
    【转】马拉松式学习与技术人员的成长性
    JavaScript Prototype in Plain Language
    Promise编程规范
    XMLHttpRequest对象解读
  • 原文地址:https://www.cnblogs.com/Kernel001/p/8040723.html
Copyright © 2011-2022 走看看