DLL动态链接库生成及其動態调用(二)
DLL动态链接库生成及其動態调用(二)
一、說明
對上一篇DLL的補充,上一篇是靜態鏈接,補充動態鏈接方式。相比靜態鏈接,會節省內存,但是可能使用過程有點複雜。
有朋友交了一種定義函數指針的方法,奈何還沒有消化!—q _ p—
二、注意點
- #include<windows.h>,因為要用帶加載庫的一些函數;
- 將之前生成的.h/.dll/.lib文件需要複製到當前項目文件夾下;
- 需要包含.h文件(兩種路徑方式均可);
- 一般順序 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动态链接库生成及其動態调用(二)相关推荐
- DLL的生成、编写、调用总结
一. DLL的创建 1. 创建环境 VS2022(注:其他VS大同小异) 2. 创建过程 新建My_Dll项目 点击确定 ->下一步->输入DLL工程的名称My_Dll->创建. 3 ...
- 【Visual Studio】使用 pexports 根据 VS 的 .dll 动态链接库生成 .lib 库文件
一.问题描述: 最近博主需要使用 8 路 USB 视频采集卡做二次开发,最后选择一款叫做"中维世纪"的 8 路 USB 视频采集卡 C301.但是,官网上仅提供了 1.0.0.4 ...
- LabVIEW系列——LabVIEW下调用DLL动态链接库
LabVIEW下调用DLL动态链接库 目录 一.需求场景 二.所需文件 三.调用步骤 注意 需求场景: 使用其他没有提供LabVIEW接口vi库,但是提供了DLL动态链接库文件的板卡. 调用其他应用程 ...
- python库_python使用ctypes库调用DLL动态链接库_python
最近要使用python调用C++编译生成的DLL动态链接库,因此学习了一下ctypes库的基本使用. ctypes是一个用于Python的外部函数库,它提供C兼容的数据类型,并允许在DLL或共享库中调 ...
- LabVIEW调用DLL动态链接库
LabVIEW调用DLL动态链接库 有些数据运算比如多个数组之间的处理.雨流计数法.卡尔曼滤波使用labview这样的图形编程语言实在过于麻烦,实现不难但有一定的逻辑复杂度,倒不如用C++或者matl ...
- python调用dll函数指针_python使用ctypes库调用DLL动态链接库
最近要使用python调用C++编译生成的DLL动态链接库,因此学习了一下ctypes库的基本使用. ctypes是一个用于Python的外部函数库,它提供C兼容的数据类型,并允许在DLL或共享库中调 ...
- C++ dll 动态链接库的创建与调用
/********************************************************/ /*DLL中的函数定义*/ /*计算x+y的值*/ int __declspec( ...
- java生成二维码 并调用二维码打印机
自己折腾了好久,百度.google了半天,发现java生成二维码的文章倒是很多,但是调用二维码打印的就很少了,好多打印出来要么是二维码占用好几张纸,要么就是多出4.5张白纸,浪费了我不少的条码纸,最终 ...
- 我的Dll(动态链接库)学习笔记
DLL(Dynamic Link Libraries)专题: 比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作.可能存在一些模块的功能较为通用,在 ...
最新文章
- Arduino可穿戴教程之第一个程序——连接硬件选择板子(二)
- apache+tomcat​现在我们实现session共享
- Sqlserver 游标的写法记录
- 查看ocx控件方法_Appium自动化测试入门教程No.8——定位控件
- 如何在一周内上线50个用户增长策略
- Deep learning with python notebooks 笔记 第一章 深度学习基础
- 《Python趣味创意编程》新书上架了
- [USACO 2012 Feb Gold] Cow Coupons【贪心 堆】
- 深入理解游戏中寻路算法
- 个性化广告推荐系统实战系列(一):任务数据简介和基本流程梳理
- Performance analysis of machine learning classifers for non‑technicalloss detection
- 【复旦大学】考研初试复试资料分享
- matlab绘制x坐标是底数为2的幂函数的折线图
- 更改vscode Java项目的.class文件输出路径
- 2022年漏洞事件盘点
- 代码测试,调试与优化小结
- solid works土炮模型建模
- 国产32位单片机使用-APT32F102x
- SVN主干到分支的详细操作!
- codeforce 555 div3 题解报告
热门文章
- 网页大作业——街机游戏拳皇(KOF)系列的介绍及试玩。
- Windows7声卡驱动安装不上问题
- 好工具推荐系列:虚拟键盘,Free Virtual Keyboard
- 专业技术计算机应用能力考试ppt2007,全国专业技术人员计算机应用能力考试专用教程:PowerPoint 2003中文演示稿(附光盘1张)...
- 深入QuickReport(三)
- Transformer 在计算机视觉领域疯狂“内卷”
- [羊城杯 2021]Ez_android
- kali linux不用网卡驱动,Kali Linux ——在无网络情况下安装无线网卡驱动
- 《区块链革命》读书笔记2 重塑金融服务形象:从赚钱机器变成致富平台重新设计公司的架构:核心与边缘
- 怎样在Mathtype中输入空格及常用快捷键