转载:https://blog.csdn.net/ztq_12345/article/details/99677769

使用ide是vs, 使用Windows.h下的3个函数对动态库进行加载
第一个:HMODULE LoadLibrary(LibFileName : PChar)//获取dll句柄
参数是需要加载dll的路径,返回值dll句柄
第二个:FARPROC GetProcAddress(HMODULE hModule, LPCSTR lpProcName)//获取函数地址
第一个参数是dll的句柄 ,第二个是调用dll中函数的名称。返回值调用函数地址
第三个:FreeLibrary(HMODULE hModule)//释放dll
参数是需要释放dll的句柄
加载动态库你需要包含2个文件  第一个是动态链接库.dll文件  第二个是静态库.lib
其中需要注意的是你需要在被调用dll中的函数前面一定要加  __declspec(dllexport)  加了过后外部才可以调用
__declspec(dllexport) char *creat()
不过这样编译过后还是会报错 127     这是因为c++支持重载 在编译的时候会在函数后边添加了函数的形参  与c语言不一致,所以在调用dll的时候会找不到调用的函数。你只需要添加extern "C"告诉编译器使用c编译这一部分 就可以运行成功了,
extern “C”  __declspec(dllexport) char *creat()
具体代码如下
#include <iostream>
#include <Windows.h>
//加载lib
#pragma comment(lib,"C:\\Users\\ztq\\Desktop\\vs\\plugin_dll\\Debug\\C:\\Users\\ztq\\Desktop\\vs\\plugin_dll\\Debug\\.lib")
int main()
{
 HMODULE hDLL;
 ***//这里是获取dll句柄***
 hDLL = LoadLibrary("C:\\Users\\ztq\\Desktop\\vs\\plugin_dll\\Debug\\plugin_dll.dll");
 if (hDLL)
 {
    ***//这里是定义指针 。int 是你调用函数返回的类型***  FUNCTION就是一个名称  后面那个括号是跟你的调用函数参数,多个用,号隔开
     //我调用dll中的函数没有参数为空,
  typedef  char *(WINAPI *FUNCTION)();  
  
  ***//这里是获取调用dll函数的地址***
  FUNCTION fun = (FUNCTION)GetProcAddress(hDLL, "creat");   
  
  if (fun)
  { 
  ***//这里是调用dll中的函数  ***函数返回的是“test” 。

std::cout<<fun()<<std::endl;
  }
  else
  {
  ***//如果调用错误就打印错误信息***
   std::cout << GetLastError() << std::endl;
  }
 }
 ***//释放dll***
 FreeLibrary(hDLL);
 system("pause");
 return 0;
}
————————————————
版权声明:本文为CSDN博主「ztq_12345」的原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ztq_12345/article/details/99677769

c++ 动态库的加载的更多相关文章

  1. 动态库DLL加载方式-静态加载和动态加载

    静态加载: 如果你有a.dll和a.lib,两个文件都有的话可以用静态加载的方式: message函数的声明你应该知道吧,把它的声明和下面的语句写到一个头文件中 #pragma comment(lib ...

  2. 关于Linux动态库的加载路径

    问题 按如下步骤在Ubuntu上编译安装Google Protocol Buffers $ ./configure $ make $ make check $ sudo make install 运行 ...

  3. qt在动态库里面加载widget的例子

    testDll和testExe项目 备注:windows下dll内不需要new QApplication, linux和mac下面需要在动态库里面new QApplication testdll.h ...

  4. c#生成动态库并加载

    下面这段代码生成dll文件,不能编译运行.点击项目右键,点击生成,这时会在debuge文件中生成相应的配置文件. using System; using System.Collections.Gene ...

  5. solr6.3.0升级与IK动态词库自动加载

    摘要:对于中文的搜索来说,词库系统是一个很比较重要的模块,本篇以IK分词器为例子,介绍如何让分词器从缓存或文件系统中自动按照一定频次进行加载扩展词库 Lucene.Solr或ElasticStack如 ...

  6. 第一百四十一节,JavaScript,封装库--DOM加载

    JavaScript,封装库--DOM加载 DOM加载,跨浏览器封装DOM加载,当网页文档结构加载完毕后执行函数,不等待图片音频视频等文件加载完毕 /** dom_jia_zai()函数,DOM页面加 ...

  7. Extjs4.1.x使用Application动态按需加载MVC各模块

    我们知道Extjs4之后提出了MVC模块开发,将以前肥厚的js文件拆分成小的js模块[model\view\controller\store\form\data等],通过controller拼接黏合, ...

  8. 动态html,异步加载页面的处理

    Selenium 基本使用 # 导入 webdriverfrom selenium import webdriver# 调用键盘按键操作时需要引入的Keys包from selenium.webdriv ...

  9. Linux下指定so共享库的加载路径

    转载地址:https://blog.csdn.net/zorelemn/article/details/52596293,做了部分修改 一.库文件的搜索路径: 1.在配置文件/etc/ld.so.co ...

随机推荐

  1. win10安装JDK cmd中可以运行java,但不能用javac,解决方案

    win10安装JDK cmd中可以运行java,但不能用javac 网上教程(1)新建->变量名"JAVA_HOME",变量值"C:\Java\jdk1.8.0_0 ...

  2. React-Native知识点相关

    React-Native相关 一,为什么要使用React-native? Hybrird的首屏时间太慢,白屏太久,影响用户体验: 原生native开发成本较高: 这里补充一点Webview的性能优化: ...

  3. 在一台电脑上,添加多个Git的ssh key

    Git的第一套公秘钥默认名为 id_rsa ,如果你想要生成另外一个公钥,比如 aysee ,你也可以使用任何你喜欢的名字. 步骤如下:(总共四大操作) 一.生成ssh key 1.生成一个新的自定义 ...

  4. 微服务架构组件梳理之Netflix停更之后该何去何从

    自2018年底,Netflix陆续宣布Eureka.Hystrix等框架进入维护状态,不再进行新功能的开发. 恰逢最近我打算对公司的办公项目进行微服务架构升级,所以恶补了一番微服务相关知识,在这里进行 ...

  5. 如何让Web程序在点击按钮后出现如执行批处理程序般的效果

    在cli程序中,输入命令得到连续的输出已经是一种进度而美观的页面交互形式,好比下图: 而web程序里也有类似的场景,比如执行一个耗时任务,除了显示出等待图标外,用户还希望把执行的状态及时显示出来.如下 ...

  6. Java通过http协议发送Get和Post请求

    https://blog.csdn.net/qq_32599479/article/details/94439131

  7. leetcode刷题-71简化路径

    题目 以 Unix 风格给出一个文件的绝对路径,你需要简化它.或者换句话说,将其转换为规范路径. 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身:此外,两个点 (..) 表示将目录切换到 ...

  8. Apache Jmter 压力测试教程

    1.官网下载安装包,地址:http://jmeter.apache.org/download_jmeter. 2.下载得到解压包,双击解压. 3.点击/bin目录下面的jmeter.bat 启动软件 ...

  9. Oracle用户自定义异常

    注意:普通的查询语句不会出现异常,只有使用into对变量进行赋值的时候才会发生异常 --系统变量: notfound --> if sql%notfund then 如果这个表达式为真,则 (增 ...

  10. 吴恩达《深度学习》-课后测验-第一门课 (Neural Networks and Deep Learning)-Week 4 - Key concepts on Deep Neural Networks(第四周 测验 – 深层神经网络)

    Week 4 Quiz - Key concepts on Deep Neural Networks(第四周 测验 – 深层神经网络) \1. What is the "cache" ...