C++ 使用静态链接库和动态链接库

C++ 使用AdbHelper静态链接库
   ## 必备文件:静态库AdbHelper.h,AdbHelper.lib以及动态库AdbHelper.dll

   ##   资源文件使用用法:
   1、首先在头文件中添加AdbHelper.h的头文件,头文件中是静态链接库的接口方法说明
   2、其次在资源文件中添加AdbHelper.lib的静态资源文件,头文件中是静态链接库的接口方法说明
   3、在需要使用到地方使用即可正常使用,如下:
      ···
      include包含引用AdbHelper.h文件
      #include "AdbHelper.h"

      使用
      // 点击连接,启动服务
     void CMFCApplication6Dlg::OnBnClickedButton2()
     {
        int res= Start();
       //assert(res == 0);
     }

     ···
   ##   通用使用用法:
   1、首先在头文件中添加AdbHelper.h的头文件,头文件中是静态链接库的接口方法说明
   2、其次选择项目,右键属性, 配置属性,链接器 输入 附加依赖项,弹窗选择静态链接库lib文件,如下图:
   ![静态链接库使用说明图片](F://Temp//test//MFCApplication6//MFCApplication6//res//静态链接库使用说明.pngG)    (步骤2 也可以使用:#pragma comment(lib,"MyLib.lib"),可以替代手动链接lib文件,显示加载链接库)
   3、在需要使用到地方使用即可正常使用,如下:
      ···
      include包含引用AdbHelper.h文件
      #include "AdbHelper.h"

      使用
      // 点击连接,启动服务
     void CMFCApplication6Dlg::OnBnClickedButton2()
     {
        int res= Start();
       //assert(res == 0);
     }
     ···

C++ 使用AdbHelper动态链接库
  通用使用用法:
   1、在需要使用到地方使用即可正常使用,如下:
      ···
     代码
     #include
     #include "windows.h"

    /* Windows头文件中包含可以加载DLL的函数。---注意要先声明一下对应的指针函数接口 */
    typedef int(*ptrSub)(int, int);
    HMODULE hMod = LoadLibrary(L"TestDll.dll");

    /* 在调用DLL函数之前,要定义函数指针,用来调用函数。可以看出,函数指针的类型与DLL中的要一致。*/
    //HMODULE hMod = LoadLibrary(L"AdbHelper.dll");

    /*    调用LoadLibrary函数加载DLL文件。加载成功,hMod指针不为空。这里也可以是一个地址加文件名 */

    使用
   ///
   /// 调用TestDll.dll中的加法函数--sum
   ///
   void CMFCWinformAppTestDlg::OnBnClickedButton11()
   {
    if (hMod != NULL)
    {
        /*
        如果加载成功,则可通过GetProcAddress函数获取DLL中需要调用的函数的地址。
        获取成功,sum指针不为空。
        */
        ptrSub sum = (ptrSub)GetProcAddress(hMod, "sum");
        if (sum != NULL)
        {
            int a = sum(10, 6);
            CString temp_value = _T("处理数据:");   //temp_value用来处理float值
            temp_value.Format(_T("%d"), a);//固定格式
            //AfxMessageBox("10 - 6 =" + temp_value);
            CString tempvalue = _T("10 - 6 =" + temp_value);
            MessageBox(tempvalue, _T("标题"), MB_USERICON | MB_OK);
            //std::cout << "10 + 6 = " << a << std::endl;
            /*获取地址成功后,通过sum调用函数功能。*/
        }
        //FreeLibrary(hMod);
        /*在完成调用功能后,不在需要DLL支持,则可以通过FreeLibrary函数释放DLL。*/
     }
  }

  ///
  /// 调用TestDll.dll中的减法法函数--minus
  ///
  void CMFCWinformAppTestDlg::OnBnClickedButton12()
  {
    if (hMod != NULL)
    {
        /*
        如果加载成功,则可通过GetProcAddress函数获取DLL中需要调用的函数的地址。
        获取成功,sum指针不为空。
        */
        ptrSub minus = (ptrSub)GetProcAddress(hMod, "minus");
        if (minus != NULL)
        {
            int a = minus(10, 6);
            CString temp_value = _T("");   //temp_value用来处理float值
            temp_value.Format(_T("%d"), a);//固定格式
            //AfxMessageBox("10 - 6 =" + temp_value);
            CString tempvalue = _T("10 - 6 =" + temp_value);
            MessageBox(tempvalue, _T("标题"), MB_USERICON | MB_OK);
            //int result = MessageBox(TEXT("10 - 6 = a"), TEXT("新建任务"), MB_YESNO);
            //std::cout << "10 - 6 = " << a << std::endl;
            /*获取地址成功后,通过sum调用函数功能。*/
        }
        FreeLibrary(hMod);
        /*在完成调用功能后,不在需要DLL支持,则可以通过FreeLibrary函数释放DLL。*/
    }
···

测试程序TestDll.dll,源C++项目TestDll,编译生成TestDll.dll,TestDll.lib以及头文件Add.h

Original: https://www.cnblogs.com/1175429393wljblog/p/16477627.html
Author: 龙骑科技
Title: C++ 使用静态链接库和动态链接库

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535324/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • C++11新特性学习

    http://www.cprogramming.com/c++11/c++11-lambda-closures.html Original: https://www.cnblogs…

    C++ 2023年5月29日
    048
  • C++ 回调函数(CallBack)的用法分析

    本文实例分析了C++中回调函数(CallBack)的用法。分享给大家供大家参考。具体分析如下: 如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。其错误是…

    C++ 2023年5月29日
    048
  • Silverlight5通过P/Invoke调用自定义C/C++ DLL(Lua)

    注1:为了确保silverilght5在浏览器或桌面上成功调用win32 DLL,必须在项目属性中勾选相应的权限: 勾选Enable running application out…

    C++ 2023年5月29日
    074
  • c++温故之结构体写法

    结构体简介结构体属于聚合数据类型的一类,它将不同的数据类型整合在一起构成一个新的类型,相当于数据库中一条记录,比如学生结构体,整合了学号,姓名等等信息。结构体的好处就是可以对这些信…

    C++ 2023年5月29日
    092
  • C++11 lambda表达式

    C++11引入了lambda表达式,使得程序员可以定义匿名函数,该函数是一次性执行的,既方便了编程,又能防止别人的访问。 Lambda表达式的语法通过下图来介绍: 这里假设我们定义…

    C++ 2023年5月29日
    055
  • VC++.net 整合开发环境使用技巧

    VC++.net 整合开发环境使用技巧 在下面我将会以条目的形式为大家描述VC.net2003的各项使用技巧,你完全可以挑选你感兴趣的内存来看,甚至不看都无所谓哈,只求你的一点支持…

    C++ 2023年5月29日
    057
  • (筆記) 如何寫入binary file某個byte的值? (C/C++) (C)

    Abstract通常公司為了保護其智慧財產權,會自己定義檔案格式,其header區會定義每個byte各代表某項資訊,所以常常需要直接對binary檔的某byte直接進行寫入。 In…

    C++ 2023年5月29日
    048
  • C++ 创建静态链接库和动态链接库

    上篇文章演示了如恶化使用C++ 编译的静态链接库和动态链接库,本篇文章主要介绍如何创建静态链接库和动态链接库,本文使用的工具是visual studio 2019 企业版,需要安装…

    C++ 2023年5月29日
    056
  • 聊聊 C++ 右值引用 和 移动构造函数

    一: 背景 最近在看 C++ 的右值引用和移动构造函数,感觉这东西一时半会还挺难理解的,可能是没踩过这方面的坑,所以没有那么大的深有体会,不管怎么说,这一篇我试着聊一下。 二: 右…

    C++ 2023年5月29日
    053
  • 【C/C++】输出文件的相对路径

    FILE 在有些编译器上会输出带路径的文件名,删除路径可使用函数 strrchr #include #include #define __FILENAME__ (strrchr(_…

    C++ 2023年5月29日
    062
  • 转:TinyXM–优秀的C++ XML解析器

    include include “tinyxml.h” include “tinystr.h” include include in…

    C++ 2023年5月29日
    047
  • Windows 8 添加隐私策略(C++版)

    well.新年上班第一天.不幸收到MS官方针对我们Snack Cards应用程序被打回消息.看看Report 内容如下: The app has declared access t…

    C++ 2023年5月29日
    060
  • C++的sort函数

    参考: https://baike.baidu.com/item/sort%E5%87%BD%E6%95%B0/11042699?fr=aladdin https://blog.c…

    C++ 2023年5月29日
    068
  • C++11 static_assert

    1。assert是动态断言,运行期检查,影响性能,故debug版本检查,release关闭。 2。C++11中引入了static_assert这个关键字,用来做编译期间的断言,因此…

    C++ 2023年5月29日
    050
  • C++多线程库的常用函数 std::lock()

    格式:函数名 + 头文件 + 用例 + 解释说明 1 函数名: 2 std::lock() 3 4 头文件: 5 #include 6 7 用例: 8 std::mutex ma,…

    C++ 2023年5月29日
    057
  • 腾讯研发类笔试面试试题(C++方向)(转)

    原文转自 https://www.cnblogs.com/freebird92/p/9595244.html 1、C和C++的特点与区别? 答: (1)C语言特点:1.作为一种面向…

    C++ 2023年5月29日
    044
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球