lib 和 dll 的区别与使用, 没有头文件改如何使用

1.生成lib文件

首先,我们先建立一个控制台工程(新建->工程->控制台程序),添加add.cpp以及add.h文件。

//sub.h
#ifndef _SUB_H
#define _SUB_H
void sub(int a,int b);
#endif

//sub.cpp
#include "sub.h"
#include <iostream>

void sub(int a,int b)
{
    std::cout<<(a-b)<<std::endl;
}
由于在工程中,没有main()函数,所以直接编译出错。这时,要右键点击工程,并选择工程属性,出现下图,选择静态链接库即可。

这时候再按F7,build solution即可产生lib文件。在Debug中只生成.lib文件。


2.生成dll文件

生成dll文件的过程与上面的过程是一样的,只是在选择Dynamic Library(.dll)即可。在Debug中会生成一个.lib和.dll两种文件。


3.两种文件的使用

  在使用时,静态链接库只要把.h和.lib文件加入到工程文件夹中即可。而动态链接库要把.h、.lib和.dll文件加入到工程中。

#include <iostream>
#include "sub.h"  //链接库的头文件
using namespaces std;

#pragma comment(lib,"sub.lib") //加入链接库

int main()
{
    sub(5,4);
    return 0;
}

4.仅有.dll文件时候的使用方法

  在没有.h和.lib文件时,需要函数指针和WIN32 API函数LoadLibrary、GetProcAddress装载,只需要.dll文件即可(将.dll文件置入工程目录中)。

#include <iostream>
#include <windows.h>               //使用函数和某些特殊变量
typedef void (*DLLFunc)(int,int);  //确定调用函数的形参
int main()
{
    DLLFunc dllFunc;
    HINSTANCE hInstLibrary = LoadLibrary("sub.dll");//加载.dll

    if (hInstLibrary == NULL)
    {
        FreeLibrary(hInstLibrary);
    }
    dllFunc = (DLLFunc)GetProcAddress(hInstLibrary, "sub");//第二个参数为要调用的函数名称
    if (dllFunc == NULL)
    {
        FreeLibrary(hInstLibrary);
    }
    dllFunc(5,4);
    FreeLibrary(hInstLibrary);
    return(1);
}

   最近一直在搞API这东西,用了curl、tinyxml和jsoncpp几种开源的库,在Linux下使用倒是很方便,在windows下还是自己编译的遇到了点问题,从新整理学习下,备用~~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏地方网络工作室的专栏

Shell 从日志文件中选择时间段内的日志输出到另一个文件

Shell 从日志文件中选择时间段内的日志输出到另一个文件 情况是这样的,某系统的日志全部写在一个日志文件内,所以这个文件非常大,非常长,每次查阅的时候非常的不...

1538
来自专栏Python、Flask、Django

python内容识别

1085
来自专栏安恒网络空间安全讲武堂

适合破解新手的160个crackme练手之01

适合破解新手的 160个crackme练手之01 无意中在网上找到了适合新手的160个crackme,所以想着来练手,感觉用来学习逆向很不错 首先打开exe,看...

2169
来自专栏互联网开发者交流社区

SEO-搜索引擎高级搜索指令

1225
来自专栏算法修养

PHP 正则表达式抓取网页内容。

我想用php抓取爱奇艺生活类型视频网页里面的元素,应该如何去做呢? 首先我要非常熟悉正则表达式,关于正则表达式的学习,我会写一篇博客一直学习的。 直接举例子: ...

2716
来自专栏顶级程序员

为什么文件名要小写?

来自:阮一峰的网络日志 链接:www.ruanyifeng.com/blog/2017/02/filename-should-be-lowercase.htm...

2635
来自专栏阮一峰的网络日志

为什么文件名要小写?

上周,《中文技术文档写作规范》加入了文件的命名规则。 "文件名建议只使用小写字母,不使用大写字母。" "为了醒目,某些说明文件的文件名,可以使用大写字母,比...

2616
来自专栏Crossin的编程教室

一些常见的新手问题

本账号开设至今,回答的各种问题,没有一万也有八千了。今天挑了其中曝光率较高的一些问题,跟各位分享,供入门不久和新关注的同学参考。 1. 我是零基础,如何开始学习...

2739
来自专栏深度学习之tensorflow实战篇

python2.7进行爬虫POI代码(划分小网格算法)

查询许久,最终选择一个,之前一直py3.6不成功,换了2.7就好多了。如果有重复去下重即可。 这里面非常重要的基类对象的init()方法与超类方法,将在下面进行...

25511
来自专栏有趣的Python

慕课网-Linux C语言编程基本原理与实践-学习笔记

个人整理,学习自用。课程内容by慕课网。 Linux C语言编程基本原理与实践 高效的学习带着目的性: 是什么 -> 干什么 -> 怎么用 重识C语言 C语言是...

2596

扫描关注云+社区