1. // windows_21_Library_use_DLL_Invoke.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include <windows.h>
  5. //2.2.2 定义函数指针,在开发工程中,一般都是大写
  6. typedef int( *DLL_ADD )( int nAdd1, int nAdd2 );
  7. typedef int( *DLL_SUB )( int nSub1, int nSub2 );
  8. typedef int( *DLL_MUL )( int nMul1, int nMul2 );
  9. void UseDll( )
  10. {
  11. //2.2.1 加载动态库,使用LoadLibrary,HMODULE = HINSTANCE
  12. HMODULE hDll = (HMODULE)LoadLibrary( "windows_21_Library_DLL_test.dll" );
  13. if (hDll == NULL)
  14. {
  15. printf( "Load Failed\n" );
  16. return;
  17. }
  18. printf( "hDll handle: %p\n", hDll );
  19. //2.2.2 定义函数指针变量
  20. DLL_ADD Dll_Add = NULL;
  21. DLL_SUB Dll_Sub = NULL;
  22. DLL_MUL Dll_Mul = NULL;
  23. //2.2.3 获取函数地址 GetProcAddress
  24. Dll_Add = (DLL_ADD)GetProcAddress( hDll, "Dll_Add" ); //取得Dll_Add函数地址转换成DLL_ADD类型
  25. printf( "Dll_Add handle: %p\n", Dll_Add );
  26. Dll_Sub = (DLL_SUB)GetProcAddress( hDll, "Dll_Sub" );
  27. printf( "Dll_Sub handle: %p\n", Dll_Sub );
  28. Dll_Mul = (DLL_MUL)GetProcAddress( hDll, "Dll_Mul" );
  29. printf( "Dll_Mul handle: %p\n", Dll_Mul );
  30. if (!(Dll_Add && Dll_Sub && Dll_Mul))
  31. {
  32. printf( "Get function failed\n" );
  33. }
  34. //2.2.4 使用函数
  35. //由于 Dll_Add函数DLL文件里使用的是CPP方式导出,无法得到正确的函数名,所以在这里无法使用
  36. int nSub = Dll_Sub( 100, 100 );
  37. int nMul = Dll_Mul( 100, 100 );
  38. printf( "nSub:%d\n", nSub );
  39. printf( "nMul:%d\n", nMul );
  40. //2.2.5 释放动态库,看样子有加载就有释放的预言就又实现了
  41. FreeLibrary( hDll );
  42. }
  43. int _tmain(int argc, _TCHAR* argv[])
  44. {
  45. UseDll( );
  46. return 0;
  47. }
来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/nfking/p/5573302.html

21.5 windows_21_Library_use_DLL_Invoke 动态库补充5相关推荐

  1. 【C语言进阶深度学习记录】十六 静态库与动态库的创建与使用

    上一篇文章学习了编译的过程,点击链接查看:[C语言进阶深度学习记录]十五 编译过程简介,每一个C源文件编译后将会生成目标文件,那么这些目标文件,还需要链接起来,生成可执行文件. 文章目录 1 链接的意 ...

  2. 第十天2017/04/21(1、函数指针、❤动态库回调❤)

    1.函数指针的语法基础 [函数指针的定义.初始化.使用]对函数名去多少个&,都不起作用,都是一样的,都还是它本身test.如:test.&test.&&test.&am ...

  3. Linux学习笔记-生成动态库(补充说明)

    1.在Makefile中创建动态库. 2.在动态库中共享class类型. Makefile文件如下: EXE=libexample.so SUBDIR=srcCXX_SOURCES=$(foreach ...

  4. linux代码动态分析软件,举例分析Linux动态库和静态库

    函数库分为静态库和动态库两种.创建Linux静态库和Linux动态库和使用它们在这里将以举例的形式详述一下.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.动态库在程序编译时并不 ...

  5. libevent 实现的socket 通信 server以及解决找不到动态库的方法

    注: client 个人觉得没必要用 libvent来实现就没写 注:由于 涉及到回调函数的使用 如有疑惑的可以先去了解回调函数的实现机理 先来说一下 libevent主要是干啥的 : 内部封装了 s ...

  6. automake生成静态库文件_动手 | 奶奶级的动态库入门

    程序编译过程 库文件 静态链接和动态链接的区别? 从0开始 - 创建和使用静态链接库 创建静态库项目 向静态库中添加文件 编译静态库 创建引用静态库的C++控制台应用 在应用中使用静态库功能 从0开始 ...

  7. ViSP安装之Windows系统基于VS2019编译器编译获得VISP动态库

    Windows系统基于VS2019编译器编译获得VISP动态库 官网地址: Installation from source for Windows with Visual C++ 2019 (vc1 ...

  8. linux动态链接库的使用,Linux动态库soname的使用

    通过一个简单的例子,体验一下Linux动态库soname的使用. 假设有一个动态库:libbar.so.1.1.0,其对应的三个名称如下. realname:libbar.so.1.1.0 sonam ...

  9. python调用c++动态库 linux_linux中使用boost.python调用c++动态库的方法

    前言 最近开始使用 robot framework 测试c++的动态库,robot framework 是跑在 windows 上面,c++动态库是跑在远程linux主机上面.测试办法是让 robot ...

最新文章

  1. 马维英坐镇,共话AI赋能生命健康与生物医药
  2. 基于 MongoDB 的 python 日志功能
  3. 【示例】C语言中利用数组存放函数指针
  4. maven 的安装配置 和编译java程序
  5. Linux Shell 通配符、元字符、转义符使用实例介绍
  6. 每天一道LeetCode-----判断一个数是否是happy number(每一位的平方和最终为1)
  7. Linux操作系统笔记——Shell变量
  8. matlab画图设置
  9. 懂得一些基本常识,就不会被《非酒精類致命飲料》或者叫做《我一辈子都不再喝可口可乐》的这篇文章所蒙蔽...
  10. 计算机无故重启是什么原因,事实:无缘无故重新启动计算机有什么问题?计算机无故重启的原因和解决方法...
  11. SOME/IP报文格式-Message ID
  12. 一份走心的iOS开发规范
  13. 导航标签html,导航标签
  14. windows下nginx常见问题记录
  15. 部门来了一位前阿里的大神…
  16. 简述计算机视觉在各领域中的成功应用,计算机视觉技术在茶叶领域中的应用现状及展望...
  17. 昌乐一中2021年高考成绩查询,喜 报
  18. 数据库 用Python把数据写入到MySQL数据库/如何使用Python将数据写入到阿里云的RDS-MYSQL
  19. GHOST 安装系统教程
  20. git reset后本地拉取_【转】【Mac + Git】之Git pull 强制拉取并覆盖本地代码

热门文章

  1. gcc编译器_2020好用的C++编译器有哪些?这几款值得下载
  2. js全局变量和局部变量名称一样_微信小程序的全局变量、页面变量,你真的掌握了?...
  3. 如何让cloudflare缓存html,wordpress博客使用CloudFlare的页面规则缓存设置教程
  4. C++socket编程(五):5.2 tcp编程总结
  5. c语言从源代码到可执行,从源代码到可执行文件
  6. mysql记录当前表数据的数据条数据类型_MySQL学习记录:数据类型与操作数据表...
  7. SpringBoot POM 继承(spring-boot-starter-parent)
  8. apscheduler 任务管理
  9. c++ 友元函数,友元类
  10. flask-Blueprint