VC++动态库的创建与调用整理

7 篇文章 0 订阅
1 篇文章 0 订阅

一、动态链接库与静态链接库描述

    DLL可以看成一种仓库,它提供一些可以拿来用的变量、函数或类。在仓库的发展史上经理了“无库-静态链接库-动态链接库”的时代。静态链接库与动态链接库都是共享代码的方式,静态链接库,lib中的指令都被直接包含在最终生成的EXE文件中了;动态链接库,不必包含在最终的EXE文件中,它执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或者静态链接库。

二、动态链接库的创建

lib.h:

#ifndef LIB_H
#define LIB_H

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

#endif
lib.cpp:

#include "lib.h"

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

生成dll与lib:

 三、动态链接库的调用

1)静态方式:

#include <stdio.h>
#include "../lib/lib.h"

#pragma comment(lib, "../Debug/lib.lib")

int main()
{
    int num = 2;
    int num2 = 6;
    int sum = add(num, num2);
    printf("两数总和:%d\n", sum);

    getchar();
    return 0;
}

生成结果:

2)动态方式:

 #include <stdio.h>
#include <windows.h>

typedef int(*lpAddFun)(int, int); //宏定义函数指针类型

int main()
{
    HINSTANCE hDLL; //句柄
    lpAddFun addFun; //函数指针
    hDLL = LoadLibrary("../Debug/lib.dll");
    if (hDLL != NULL)
    {
        addFun = (lpAddFun)GetProcAddress(hDLL, "add");
        if (addFun != NULL)
        {
            int result = addFun(2, 6);
            printf("两数总和:%d\n", result);
        }
        FreeLibrary(hDLL);
    }
    getchar();
    return 0;
}

生成结果:

 说明:另外一种方式是通过.def文件导出DLL的:

注意: 这个生成的动态库与之前的一种是同一种类型,调用方式也是一样的可以动态与静态两种方式。

总结:除了最基本的C++动态库以外,还可以生成win32动态库,MFC规则库,MFC扩展库,以及后来的Qt动态库或者静态库。C++动态库与win32动态库调用方式基本类似,MFC的库可能会需要额外引入依赖头文件;QT动态库需要用自身的方式来调用有静态与动态方式(QLibrary),这里不再描述。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值