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)专题: 比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作.可能存在一些模块的功能较为通用,在 ...
最新文章
- 超强、超详细Redis数据库入门教程
- python关联分析引擎_PowerBI x Python 之关联分析(上)
- apt-get卸载命令
- Box 'laravel/homestead' could not be found.
- Jmeter参数化的理解
- 用户设置及用户默认设置
- 输出指定范围内的完数
- python判断文件是否存在 中文_python如何判断文件是否存在
- 小菜的系统框架界面设计-小菜用户权限管理软件开源大放送
- luogu4360 锯木厂选址 (斜率优化dp)
- 【Matlab学习笔记】【函数学习】max()和max(max())的区别
- Linux服务器 -- 安全篇
- Android通讯录程序设计报告,Android个人通讯录课程设计报告.doc
- 斜齿轮重合度计算公式_齿轮强度校核及重合度计算(已优化)
- AppCan 携手腾讯微博开放平台共推跨平台开发工具
- 三维空间点到线段的距离
- chrome 内核的浏览器pdf 字体显示问题
- 计算机网络系列选择题
- AD7606(并行8080方式)的STM32F103ZET6配置
- java的体系结构_java体系结构介绍