1、windows库的存在方式

1.1、静态库:不能被加载的程序,可以理解为目标程序的归档;*.lib。

1.2、动态库:是可以被加载的程序;*.dll。

2、静态库

2.1、静态库的特点
    目标程序的归档;
    静态库的代码会被嵌入到程序当中;
    程序执行时不需要静态库存在;
    致使程序很大。

2.2、C语言的静态库
2.2.1、创建静态库
    创建Win32静态库项目,使用*.c文件建立项目。
2.2.2、添加静态库函数
2.2.3、在程序中将静态库导入
    项目设置中可以添加lib文件;
    或者使用关键字pragma。
    #pragma comment(lib,"../Lib/Winclib.lib")
2.2.4、使用静态库提供的函数
    在C语言程序中,直接使用函数即可。

2.2.5、实例,(使用项目设置链接编译输出目录等,将库文件输出在../Lib/下,执行程序输出在../Bin/下)

2.2.5.1、vc++6.0创建一个静态库项目,添加源文件winclib.c,代码如下

 int C_Add( int nAdd1, int nAdd2 ){
return ( nAdd1 + nAdd2 );
} int C_Sub( int nSub1, int nSub2 ){
return ( nSub1 - nSub2 );
}

winclib.c

编译后为winclib.lib

2.2.5.2、vc++6.0创建一个win32控制台应用程序,添加源文件useclib.c,代码如下

 //导入静态库;
#pragma comment(lib,"../Lib/Winclib.lib") int main( )
{
int nAdd = ;
int nSub = ; //使用静态库函数;
nAdd = C_Add( , );
nSub = C_Sub( , ); printf( "ADD:%d\n", nAdd );
printf( "SUB:%d\n", nSub ); return ;
}

useclib.c

注意,编译时会出现警告,但是不影响编译和连接;

编译后为uscclib.exe

2.3、C++语言的静态库
2.3.1、创建静态库
    创建win32静态库项目,使用*.cpp文件建立项目。
2.3.2、添加静态库的函数
2.3.3、导入静态库
    #pragma comment( lib, "../Lib/Wincpplib.lib")
2.3.4、定义库函数的原型
    extern int CPP_Add(int nAdd1, int nAdd2 );
    extern int CPP_Sub(int nSub1, int nSub2 );
2.3.5、使用库函数

2.3.6、实例

2.3.6.1、vc++6.0创建一个静态库项目,添加源文件wincpplib.cpp,代码如下

 int CPP_Add( int nAdd1, int nAdd2 ){
return ( nAdd1 + nAdd2 );
} int CPP_Sub( int nSub1, int nSub2 ){
return ( nSub1 - nSub2 );
}

wincpplib.cpp

2.3.6.2、vc++6.0创建一个win32控制台应用程序,添加源文件usecpplib.cpp,代码如下

 #include "stdafx.h"

 //导入C++的静态库;
#pragma comment( lib, "../Lib/Wincpplib.lib") int main()
{
int nAdd = CPP_Add( , );
int nSub = CPP_Sub( , ); printf( "ADD:%d\n", nAdd );
printf( "SUB:%d\n", nSub ); return ;
}

usecpplib.cpp

2.3.7、在C++文件中使用C源文件生成的库

注意:此时,需要看C源文件使用的是C编译器还是C++编译器来生成的库,

  若是使用C编译器生成的库,需要额外加extern "C"代码;

  若是使用C++编译器生成的库,可不需要加这样的代码。

如下:
    extern "C" {
        int C_Add(int nAdd1, int nAdd2 );
        int C_Sub(int nSub1, int nSub2 );
    }

vc++6.0创建一个win32控制台应用程序,添加源文件usecpplib.cpp,代码如下

 #include "stdafx.h"

 //导入C++的静态库;
#pragma comment( lib, "../Lib/Wincpplib.lib") //导入C的静态库;
#pragma comment(lib,"../Lib/Winclib.lib") //定义函数原型;注意:extern可加可不加;
extern int CPP_Add(int nAdd1, int nAdd2 );
extern int CPP_Sub(int nSub1, int nSub2 );
//此时,extern必须使用;
extern "C" {
int C_Add(int nAdd1, int nAdd2 );
int C_Sub(int nSub1, int nSub2 );
} int main(int argc, char* argv[])
{
int nAdd = CPP_Add( , );
int nSub = CPP_Sub( , ); printf( "ADD:%d\n", nAdd );
printf( "SUB:%d\n", nSub ); int nAdd2 = C_Add( , );
int nSub2 = C_Sub( , ); printf( "ADD:%d\n", nAdd2 );
printf( "SUB:%d\n", nSub2 );
return ;
}

wincpplib.cpp

3、动态库
3.1、动态库的特点
    可以提供模块化的方式,方便协调开发。
    对源代码保护。
    减少可执行文件的大小
    提高代码的重用率。
3.2、动态库的基本使用方法
    动态库的创建
    加载动态库
    获取并使用库函数、变量或类
    释放动态库
3.3、函数的动态库
3.3.1、动态库的创建
    创建DLL的项目
    增加动态库的函数
    导出动态库函数:需要使用__declspec(dllexport)代码。
3.3.2、动态库的使用
3.3.2.1、隐式链接
    导入LIB
    定义函数原型
    使用函数
    注意:这些库是Dll动态库的映射表。
    大量的win32的API基本都是使用的隐式链接,如kernel32.lib、user32.lib、gdi32.lib

实例:

vc++6.0创建一个静态库项目,添加源文件DllFunc.cpp,代码如下

 __declspec(dllexport) int Dll_Add( int nAdd1, int nAdd2 ){
return ( nAdd1 + nAdd2 );
} __declspec(dllexport) int Dll_Sub( int nSub1, int nSub2 ){
return ( nSub1 - nSub2 );
}

DllFunc.cpp

vc++6.0创建一个win32控制台应用程序,添加源文件CallDllFunc.cpp,代码如下

 #include "stdafx.h"

 //隐式导入DLL的Lib文件;
#pragma comment( lib, "../Lib/dllfunc.lib") //定义函数原型;
int Dll_Add( int nAdd1, int nAdd2 );
int Dll_Sub( int nSun1, int nSub2 ); int main(int argc, char* argv[])
{
int nAdd = Dll_Add( , );
int nSub = Dll_Sub( , );
printf("Dll_Add:%d\n", nAdd );
printf("Dll_Sub:%d\n", nSub );
return ;
}

CallDllFunc.cpp

3.3.2.2、显示链接

windows库的更多相关文章

  1. windows库的创建和使用:静态库+动态库

    windows库的创建和使用:静态库+动态库   一.静态库的创建和使用 1. 静态库创建 (1)首先创建projecttest,測试代码例如以下: 1) test.h void test_print ...

  2. c++MFC工程修改在共享DLL中使用MFC为使用标准Windows库的解决办法

    由于创建MFC工程时,默认是在共享DLL中使用MFC,如果将此选项改成使用标准Windows库,会报如下错误 c:\program files\microsoft visual studio 9.0\ ...

  3. Windows的静态库使用步骤

    windows库程序: 1.静态库程序 - 运行时不独立存在,会被链接到可执行文件或者动态库中,目标程序的归档. 文件扩展名:LIB 2.动态库程序 - 运行时独立存在,不会被链接到可执行文件或其他动 ...

  4. windows 10 删除库后自动恢复的解决方法

    目录 什么是windows 库? 手动删除不行吗? 如何正确的"删除"? title: windows 10 删除库后自动恢复的解决方法 date: 2019-06-09 15:4 ...

  5. C++windows内核编程笔记day11 win32静态库和动态库的使用

    windows库程序: 静态库: 源码被链接到调用的程序或动态库,被调用时,代码最少有1份,文件后缀.LIB 动态库: 函数被程序或其它动态库调用,被调用时,代码仅仅有1份,文件后缀.DLL 静态库( ...

  6. windows和linux环境下使用google的glog日志库

    一.概述 glog是google推出的一款轻量级c++开源日志框架,源码在github上,目前最新release版本是v0.3.5. githut地址:https://github.com/googl ...

  7. Windows OS上安装运行Apache Kafka教程

    Windows OS上安装运行Apache Kafka教程 下面是分步指南,教你如何在Windows OS上安装运行Apache Zookeeper和Apache Kafka. 简介 本文讲述了如何在 ...

  8. windows进程/线程创建过程 --- windows操作系统学习

    有了之前的对进程和线程对象的学习的铺垫后,我们现在可以开始学习windows下的进程创建过程了,我将尝试着从源代码的层次来分析在windows下创建一个进程都要涉及到哪些步骤,都要涉及到哪些数据结构. ...

  9. 3DSlicer源代码编译过程vs2008+windows xp [转]

    一 下载QT源代码编译 1.  简述   在 Windows2000/xp/vista 下,安装 VS2008, QT 4.7.2 :并在 VS2008上建立 QT 的集成开发环境,利用 VS2008 ...

随机推荐

  1. 【BZOJ2553】[BeiJing2011]禁忌 AC自动机+期望DP+矩阵乘法

    [BZOJ2553][BeiJing2011]禁忌 Description Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平. ...

  2. javascript 禁止页面选取-兼容IE、Chrome和firefox浏览器

    在做到一个页面需要禁止网页内容被选取的时候,碰到浏览器兼容的问题,解决方法如下 1.单独使用适用于IE.Chrome浏览器,主要是在head的<script>标签里面加上如下代码 docu ...

  3. TCL电视直播软件

    升级你的电视系统我的型号46寸 V7300 3D,具体的升级程序在"技术宅"里有下载 找个格式化过的U盘把你的程序拷贝进去,插在电视上,电视会自动升级 当你成功安装V8-0MT32 ...

  4. HDU 5667 Sequence(矩阵快速幂)

    Problem Description Holion August will eat every thing he has found. Now there are many foods,but he ...

  5. Ubuntu 14.04 安装jdk,tomcat

     分类: 碎知识(8)  版权声明:本文为博主原创文章,未经博主允许不得转载. 写在前面: 装的时候,参考了许多网上的资料,有很多人写的有些简单了,人家那边版本稍微一更新,像我这样的小白就找不到东南西 ...

  6. Python爬虫实例(二)使用selenium抓取斗鱼直播平台数据

    程序说明:抓取斗鱼直播平台的直播房间号及其观众人数,最后统计出某一时刻的总直播人数和总观众人数. 过程分析: 一.进入斗鱼首页http://www.douyu.com/directory/all 进入 ...

  7. Yii框架2.0的视图和widgets表单的使用

    2.0的控制器的创建和action方法的添加和1.0的基本是一样的.但我发现他的widgets 的ActiveForm和1.1版本有些不一样的地方. 对于视图基本也是一样的,有render 和 ren ...

  8. 解决 Invalid signature file digest for Manifest 问题

    idea打包的jar文件在spark执行是报错: Invalid signature file digest for Manifest 通过以下命令解决: zip -d myjob.jar META- ...

  9. django模型:为已存在的表建立模型

    为已经存在的表建立模型:参考https://blog.csdn.net/opera95/article/details/78200024 为已经存在的表建立模型1.python manage.py i ...

  10. ssmWeb开发框架_2014-01

    一直在准备做一套系统, 具体用来干什么都没确定. 只是从纯技术人员的想法, 先搭建一套开发的框架. 做的时候才发现, 系统用途不同, 框架也是不同的. 暂时就先当作企业内部管理的系统来做吧. 后台基础 ...