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

    库分两种,静态库和动态库,而动态库的加载方法又分两种,动态加载和静态加载

    做为外部库,这两种库的加载都不需要包含头文件,因为相关的信息已经在导入库了

    假设导入函数如下:add(int x, int y);

    头文件如下:

    extern "C" int __declspec(dllexport)add(int x, int y);

    extern "C"代表c风格的,同时如果用不同的语言,则必需用相同的导入或者导出

    源文件如下:

    #include "test.h"

    int add(int x, int y)
    {
       return x + y;
    }

    动态加载使用如下:

    typedef int(*lpAddFun)(int, int);

     HINSTANCE hDll; //DLL句柄

     pAddFun addFun; //函数指针

    hDll = LoadLibrary(TEXT("D:\\work\\dll\\dll\\Debug\\test.dll"));


    addFun = (lpAddFun)GetProcAddress(hDll, "add");

    int result = addFun(2, 3);//得到函数指针后使用

    先用windows函数LoadLibrary()得到dll的句柄,然后再根据句柄得到函数指针

    如果是动态加载,则在运行的时候才能加载上

    静态加载使用方式如下:

    #pragma comment(lib,"D:\\work\\dll\\dll\\Debug\\test.lib");

    //.lib文件中仅仅是关于其对应DLL文件中函数的重定位信息

    extern "C"  int __declspec(dllimport)add(int x,int y);

    int result = add(3, 6);

    由此可见,动态加载使用比较方便,同时在运行的时刻加载,得到函数指针后直接使用.

    而静态加载程序一开始运行就加载,使用的时候如同程序内的函数一样,不需要LoadLibrary()即可

  • 相关阅读:
    centos6升级python
    MySQL的BLOB类型(解决mysql不支持mb4编码的时候存储emoji表情问题)
    librdkafka安装和php扩展php-rdkafka安装
    Mac High Sierra 降级安装Mac Sierra
    mysql常用命令
    PHP_CodeSniffer 安装和phpstorm配置
    SSH登录异常(someone is doing something nasty)
    java并发 —— Lock
    java 并发——线程
    java 并发——内置锁
  • 原文地址:https://www.cnblogs.com/lizhengjin/p/1492541.html
Copyright © 2011-2022 走看看