DLL动态链接库生成及其動態调用(二)

一、說明

對上一篇DLL的補充,上一篇是靜態鏈接,補充動態鏈接方式。相比靜態鏈接,會節省內存,但是可能使用過程有點複雜。

有朋友交了一種定義函數指針的方法,奈何還沒有消化!—q _ p—

二、注意點

  1. #include<windows.h>,因為要用帶加載庫的一些函數;
  2. 將之前生成的.h/.dll/.lib文件需要複製到當前項目文件夾下;
  3. 需要包含.h文件(兩種路徑方式均可);
  4. 一般順序 LoadLibrary—GetProcAddress—FreeLibrary;其中還涉及到一些對返回信息值的判斷。

代码如下(示例):

#pragma once
#include <iostream>
#include <windows.h>using namespace std;
//將生成的dll文件的.h/.lib/.dll文件複製到當前項目文件夾下//包含頭文件信息,1,絕對路徑   2,相對路徑     頭文件當中包含函數聲明等信息
//#include "E:\rkhua_doc\CODE\VS_Project\MyDll_Plus\AddDLL\AddDLL\MyAddDLL.h"//-----絕對路徑
#include "./MyAddDLL.h"//---------------------------------------------包含頭文件//定義函數指針---方法一:
typedef int (*pFunc)(int, int);//-------------------------------------定義函數指針,用來後面指向GetProcAddress返回的鏈接的函數的地址
//定義函數指針---方法二:
/*#define IF_API(type,fapi)typedef type(__stdcall,*fp##fapi);
#define DLLFUN(name) fp##name  name =(fp##name)::GetProcAddress(m_hModule,#name);*/int main()
{//創建動態鏈接庫函數的句柄//typedef HINSTANCE HMODULE;HMODULE handle = LoadLibraryA("AddDLL.dll");//-------------------加載dll文件,並判斷是否加載成功//判斷加載結果是否成功if (handle)//{cout << "Load dll file successful..." << endl;//獲得加載的庫文件的地址-----賦值給fun//GetProcAddress();GetProcAddress(_In_ HMODULE hModule,_In_ LPCSTR lpProcName);//方法一:pFunc fun = (pFunc)GetProcAddress(handle, "add");//---------獲得DLL中的輸出函數地址//返回值//如果函数调用成功,返回值是DLL中的输出函数地址。//如果函数调用失败,返回值是NULL。得到进一步的错误信息,调用函数GetLastError。if (fun){cout << "獲取DLL文件函數地址成功..." << endl;cout << fun(4, 5) << endl;}//cout <<fun(4,5)<<endl;cout << "釋放加載文件...." << endl;FreeLibrary(handle);//-------------------------------------釋放加載的動態鏈接庫文件}else {cout << "Load dll file failed..." << endl;cout << "釋放加載文件...." << endl;FreeLibrary(handle);//-------------------------------------釋放加載的動態鏈接庫文件}system("pause");return 0;
}

上一篇DLL動態鏈接庫生成及其調用鏈接:
https://blog.csdn.net/weixin_45107812/article/details/109737763


总结

學習重在過程,而不能急於尋求結果!

DLL动态链接库生成及其動態调用(二)相关推荐

  1. DLL的生成、编写、调用总结

    一. DLL的创建 1. 创建环境 VS2022(注:其他VS大同小异) 2. 创建过程 新建My_Dll项目 点击确定 ->下一步->输入DLL工程的名称My_Dll->创建. 3 ...

  2. 【Visual Studio】使用 pexports 根据 VS 的 .dll 动态链接库生成 .lib 库文件

    一.问题描述: 最近博主需要使用 8 路 USB 视频采集卡做二次开发,最后选择一款叫做"中维世纪"的 8 路 USB 视频采集卡 C301.但是,官网上仅提供了 1.0.0.4 ...

  3. LabVIEW系列——LabVIEW下调用DLL动态链接库

    LabVIEW下调用DLL动态链接库 目录 一.需求场景 二.所需文件 三.调用步骤 注意 需求场景: 使用其他没有提供LabVIEW接口vi库,但是提供了DLL动态链接库文件的板卡. 调用其他应用程 ...

  4. python库_python使用ctypes库调用DLL动态链接库_python

    最近要使用python调用C++编译生成的DLL动态链接库,因此学习了一下ctypes库的基本使用. ctypes是一个用于Python的外部函数库,它提供C兼容的数据类型,并允许在DLL或共享库中调 ...

  5. LabVIEW调用DLL动态链接库

    LabVIEW调用DLL动态链接库 有些数据运算比如多个数组之间的处理.雨流计数法.卡尔曼滤波使用labview这样的图形编程语言实在过于麻烦,实现不难但有一定的逻辑复杂度,倒不如用C++或者matl ...

  6. python调用dll函数指针_python使用ctypes库调用DLL动态链接库

    最近要使用python调用C++编译生成的DLL动态链接库,因此学习了一下ctypes库的基本使用. ctypes是一个用于Python的外部函数库,它提供C兼容的数据类型,并允许在DLL或共享库中调 ...

  7. C++ dll 动态链接库的创建与调用

    /********************************************************/ /*DLL中的函数定义*/ /*计算x+y的值*/ int __declspec( ...

  8. java生成二维码 并调用二维码打印机

    自己折腾了好久,百度.google了半天,发现java生成二维码的文章倒是很多,但是调用二维码打印的就很少了,好多打印出来要么是二维码占用好几张纸,要么就是多出4.5张白纸,浪费了我不少的条码纸,最终 ...

  9. 我的Dll(动态链接库)学习笔记

    DLL(Dynamic Link Libraries)专题: 比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作.可能存在一些模块的功能较为通用,在 ...

最新文章

  1. Arduino可穿戴教程之第一个程序——连接硬件选择板子(二)
  2. apache+tomcat​现在我们实现session共享
  3. Sqlserver 游标的写法记录
  4. 查看ocx控件方法_Appium自动化测试入门教程No.8——定位控件
  5. 如何在一周内上线50个用户增长策略
  6. Deep learning with python notebooks 笔记 第一章 深度学习基础
  7. 《Python趣味创意编程》新书上架了
  8. [USACO 2012 Feb Gold] Cow Coupons【贪心 堆】
  9. 深入理解游戏中寻路算法
  10. 个性化广告推荐系统实战系列(一):任务数据简介和基本流程梳理
  11. Performance analysis of machine learning classifers for non‑technicalloss detection
  12. 【复旦大学】考研初试复试资料分享
  13. matlab绘制x坐标是底数为2的幂函数的折线图
  14. 更改vscode Java项目的.class文件输出路径
  15. 2022年漏洞事件盘点
  16. 代码测试,调试与优化小结
  17. solid works土炮模型建模
  18. 国产32位单片机使用-APT32F102x
  19. SVN主干到分支的详细操作!
  20. codeforce 555 div3 题解报告

热门文章

  1. 网页大作业——街机游戏拳皇(KOF)系列的介绍及试玩。
  2. Windows7声卡驱动安装不上问题
  3. 好工具推荐系列:虚拟键盘,Free Virtual Keyboard
  4. 专业技术计算机应用能力考试ppt2007,全国专业技术人员计算机应用能力考试专用教程:PowerPoint 2003中文演示稿(附光盘1张)...
  5. 深入QuickReport(三)
  6. Transformer 在计算机视觉领域疯狂“内卷”
  7. [羊城杯 2021]Ez_android
  8. kali linux不用网卡驱动,Kali Linux ——在无网络情况下安装无线网卡驱动
  9. 《区块链革命》读书笔记2 重塑金融服务形象:从赚钱机器变成致富平台重新设计公司的架构:核心与边缘
  10. 怎样在Mathtype中输入空格及常用快捷键