windows库

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,代码如下

1 int C_Add( int nAdd1, int nAdd2 ){
2     return ( nAdd1 + nAdd2 );
3 }
4
5 int C_Sub( int nSub1, int nSub2 ){
6     return ( nSub1 - nSub2 );
7 }

winclib.c

编译后为winclib.lib

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

 1 //导入静态库;
 2 #pragma comment(lib,"../Lib/Winclib.lib")
 3
 4 int main( )
 5 {
 6     int nAdd = 0;
 7     int nSub = 0;
 8
 9     //使用静态库函数;
10     nAdd = C_Add( 100, 200 );
11     nSub = C_Sub( 100, 200 );
12
13     printf( "ADD:%d\n", nAdd );
14     printf( "SUB:%d\n", nSub );
15
16     return 0;
17 }

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,代码如下

1 int CPP_Add( int nAdd1, int nAdd2 ){
2     return ( nAdd1 + nAdd2 );
3 }
4
5 int CPP_Sub( int nSub1, int nSub2 ){
6     return ( nSub1 - nSub2 );
7 }

wincpplib.cpp

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

 1 #include "stdafx.h"
 2
 3 //导入C++的静态库;
 4 #pragma comment( lib, "../Lib/Wincpplib.lib")
 5
 6 int main()
 7 {
 8     int nAdd = CPP_Add( 100, 200);
 9     int nSub = CPP_Sub( 100, 200);
10
11     printf( "ADD:%d\n", nAdd );
12     printf( "SUB:%d\n", nSub );
13
14     return 0;
15 }

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,代码如下

 1 #include "stdafx.h"
 2
 3 //导入C++的静态库;
 4 #pragma comment( lib, "../Lib/Wincpplib.lib")
 5
 6 //导入C的静态库;
 7 #pragma comment(lib,"../Lib/Winclib.lib")
 8
 9 //定义函数原型;注意:extern可加可不加;
10 extern int CPP_Add(int nAdd1, int nAdd2 );
11 extern int CPP_Sub(int nSub1, int nSub2 );
12 //此时,extern必须使用;
13 extern "C" {
14     int C_Add(int nAdd1, int nAdd2 );
15     int C_Sub(int nSub1, int nSub2 );
16 }
17
18 int main(int argc, char* argv[])
19 {
20     int nAdd = CPP_Add( 100, 200);
21     int nSub = CPP_Sub( 100, 200);
22
23     printf( "ADD:%d\n", nAdd );
24     printf( "SUB:%d\n", nSub );
25
26     int nAdd2 = C_Add( 100, 200 );
27     int nSub2 = C_Sub( 100, 200 );
28
29     printf( "ADD:%d\n", nAdd2 );
30     printf( "SUB:%d\n", nSub2 );
31     return 0;
32 }

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,代码如下

1 __declspec(dllexport) int Dll_Add( int nAdd1, int nAdd2 ){
2     return ( nAdd1 + nAdd2 );
3 }
4
5 __declspec(dllexport) int Dll_Sub( int nSub1, int nSub2 ){
6     return ( nSub1 - nSub2 );
7 }

DllFunc.cpp

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

 1 #include "stdafx.h"
 2
 3 //隐式导入DLL的Lib文件;
 4 #pragma comment( lib, "../Lib/dllfunc.lib")
 5
 6 //定义函数原型;
 7 int Dll_Add( int nAdd1, int nAdd2 );
 8 int Dll_Sub( int nSun1, int nSub2 );
 9
10 int main(int argc, char* argv[])
11 {
12     int nAdd = Dll_Add( 100, 200 );
13     int nSub = Dll_Sub( 100, 200 );
14     printf("Dll_Add:%d\n", nAdd );
15     printf("Dll_Sub:%d\n", nSub );
16     return 0;
17 }

CallDllFunc.cpp

3.3.2.2、显示链接

时间: 2024-10-07 02:16:11

windows库的相关文章

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

windows库的创建和使用:静态库+动态库 一.静态库的创建和使用 1. 静态库创建 (1)首先创建工程test,测试代码如下: 1) test.h void test_print(); 2) test.cpp #include "test.h" #include <stdio.h> void test_print() { printf("test_print in static lib."); } 3)右击工程test:属性-->配置属性--&

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

windows库程序: 静态库: 源代码被链接到调用的程序或动态库,被调用时,代码最少有1份,文件后缀.LIB 动态库: 函数被程序或其他动态库调用,被调用时,代码只有1份,文件后缀.DLL 静态库(C语言): 创建时,选择文本类型文件,输入Clib.c,设置输出路径 ../lib/Clib.lib int Clib_add(int a,int b) { return a+b; } 同一上工作区,建立控制台程序(.c文件)调用静态库: #include<STDIO.H> #pragma com

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

一 下载QT源代码编译 1.  简述   在 Windows2000/xp/vista 下,安装 VS2008, QT 4.7.2 :并在 VS2008上建立 QT 的集成开发环境,利用 VS2008 开发环境开发,调试 QT 程序:2. 所需程序   VS2008以及VS2008Sp1                                  //  VS2008 的安装程序:   qt-everywhere-opensource-src-4.7.4.tar.gz          /

在共享DLL中使用MFC 和在静态库中使用MFC的区别

使用VS2008,在项目属性中有一项MFC的使用,有三种设置: 1.使用标准Windows库 2.在共享DLL中使用MFC 3.在静态库中使用MFC 第一种顾名思义. 第二种指的是打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件. 第三种是将DLL中的相关代码写进EXE文件中,文件较大,但是可以在没有相关DLL的机器上运行. 同时,如果程序本来是第二种方式,发给同事,在同事机器上运行时,可能会出现错误: “无法启动程序……,由于

Windows核心编程01-Windows应用程序

Windows应用程序的类型 -控制台程序Console DOS程序,本身没有窗口,通过Windows DOS窗口执行 -窗口程序 拥有自己的窗口,可以与用户交互 -库程序 存放代码.数据的程序,执行文件可以从中取出来代码执行和获取数据 -静态库程序 扩展名LIB,在执行文件执行时从中获取代码 -动态库程序 扩展名DLL,在编译链接程序时,将函数地址放入到执行文件中 三种应用程序的对比 -入口函数 控制台程序-main 窗口程序-WinMain 动态库程序-DllMain 静态库程序-无入口函数

Windows安装运行Kafka

简介 本文讲述了如何在Windows OS上配置并启动Apache Kafka,这篇指南将会指导你安装Java和Apache Zookeeper. Apache Kafka是一个快速可扩展的消息队列,能够应对繁重的读写负载,即IO相关工作.更多信息请参见http://kafka.apache.org.由于Zookeeper能提供可靠的分布式协调服务,Apache Kafka需要运行一个Zookeeper实例.更多Zookeeper的相关信息请查看https://zookeeper.apache.

[转]解决在库中已定义的办法

1>msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" ([email protected]@[email protected]@@Z) 已经在 libcmtd.lib(typinfo.obj) 中定义1>msvcrtd.lib(ti_inst.obj) : error LNK2005: "

Windows OS上安装运行Apache Kafka教程

本文转自:http://geek.csdn.net/news/detail/52976 下面是分步指南,教你如何在Windows OS上安装运行Apache Zookeeper和Apache Kafka. 简介 本文讲述了如何在Windows OS上配置并启动Apache Kafka,这篇指南将会指导你安装Java和Apache Zookeeper. Apache Kafka是一个快速可扩展的消息队列,能够应对繁重的读写负载,即IO相关工作.更多信息请参见http://kafka.apache.

C/C++ (函数、变量和类)动态库的创建、导出和使用(图文+示例代码)

 一 Windows库 1引入库的原因: a.项目的复杂程度大 b.提高代码的利益利用率 2库的分类 2.1静态库: *.lib,不能被加载的程序,可以理解为目标程序的归档. 2.2动态库:*.dll,可以被应用程序加载的程序. 二 动态库 1动态库优点 1.1可以提供模块化的方式,方便协调开发(对于大项目,每个人写的东西编译为动态库,直接链接即可) 1.2对源代码保护 1.3减小可执行文件大小 1.4提高代码重用率 2动态库的基本使用方法 2.1动态库的创建 2.2加载动态库 2.3获取并