zoukankan      html  css  js  c++  java
  • c++ 动态库的加载

    转载: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

  • 相关阅读:
    datanode报错Problem connecting to server
    使用命令查看hdfs的状态
    Access denied for user root. Superuser privilege is requ
    ElasticSearch默认的分页参数 size
    SparkStreaming Kafka 维护offset
    【容错篇】Spark Streaming的还原药水——Checkpoint
    251 Android 线性与相对布局简介
    250 Android Studio使用指南 总结
    249 如何解决项目导入产生的中文乱码问题
    248 gradle更新问题
  • 原文地址:https://www.cnblogs.com/MCSFX/p/12695383.html
Copyright © 2011-2022 走看看