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. 超强、超详细Redis数据库入门教程
  2. python关联分析引擎_PowerBI x Python 之关联分析(上)
  3. apt-get卸载命令
  4. Box 'laravel/homestead' could not be found.
  5. Jmeter参数化的理解
  6. 用户设置及用户默认设置
  7. 输出指定范围内的完数
  8. python判断文件是否存在 中文_python如何判断文件是否存在
  9. 小菜的系统框架界面设计-小菜用户权限管理软件开源大放送
  10. luogu4360 锯木厂选址 (斜率优化dp)
  11. 【Matlab学习笔记】【函数学习】max()和max(max())的区别
  12. Linux服务器 -- 安全篇
  13. Android通讯录程序设计报告,Android个人通讯录课程设计报告.doc
  14. 斜齿轮重合度计算公式_齿轮强度校核及重合度计算(已优化)
  15. AppCan 携手腾讯微博开放平台共推跨平台开发工具
  16. 三维空间点到线段的距离
  17. chrome 内核的浏览器pdf 字体显示问题
  18. 计算机网络系列选择题
  19. AD7606(并行8080方式)的STM32F103ZET6配置
  20. java的体系结构_java体系结构介绍

热门文章

  1. 三、wss连接B站弹幕
  2. 解决连击——按键防止连击的方法
  3. 河南大学计算机科学研究生,河南大学计算机科学与技术硕士研究生培养方案
  4. html常见的错误,常见的6种HTML5错误用法
  5. 音频声学基础四,电声器件简介
  6. 保护病毒库!主流杀毒软件备份全攻略
  7. WebDAV之葫芦儿·派盘+NMM
  8. GPGPU-Sim(番外)-如何加快GPGPU-Sim的运行速度
  9. 工业边缘控制软件 CODESYS*使作指南
  10. 如何用php制作超级玛丽,html5 利用canvas实现超级玛丽简单动画