VC++:创建,调用Win32静态链接库
概述
DLL(Dynamic Linkable Library)动态链接库,Dll可以看作一种仓库,仓库中包含了可以直接使用的变量,函数或类。
仓库的发展史经历了"无库" ---> "静态链接库"  ---> "动态链接库"。
静态链接库与动态链接库都能实现共享代码,如果使用静态链接库,编译后lib中的指令会被包含在生成的EXE文件中,如果使用动态链接库,则不会被包含到EXE文件中,EXE文件执行时动态加载和卸载dll文件。
库的分类
1.Win32库(非MFC)库
    Win32库又分为:动态链接库和静态链接库
    Win32库不采用MFC类库结构,导出函数为标准的C接口,可以被MFC或非MFC编写的应用程序调用。
2.MFC库
    MFC库又分为:MFC规则DLL和MFC扩展DLL
    MFC规则DLL:包含一个集成自CWinApp的类,但其无消息循环。
    MFC扩展DLL:采用MFC的动态链接库创建,它只能被MFC编写的应用程序调用。
创建Win32静态链接库
使用vs2010进行创建
1.“新建项目” 项目名为"wn32lib”--->选择"Win32项目" --->下一步 勾选 "静态库",点击完成:
这时候将生成一个空的项目,创建wn32lib.cpp和wn32lib.h。
wn32lib.cpp
#include <stdio.h>
int WN_Add(int a, int b)
{
	return a + b;
}
int WN_Say()
{
	printf("say hello \n");
	return 1;
}
wn32lib.h
#ifndef _WIN32LIB_H
#define _WIN32LIB_H
int WN_Add(int a, int b);
int WN_Say();
#endif
编译该项目,会在Debug目录下生成wn32lib.lib文件
调用Win32静态链接库
鼠标在解决方案右击 ---> "添加" ---> "新建项目",项目名称为"libTest",选择win32控制台项目
在libTest.cpp源文件中添加如下代码:
// libTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "../wn32lib/wn32lib.h"
#ifdef _DEBUG
#pragma comment(lib, "../Debug/wn32lib.lib")
#else
#pragma comment(lib, "../Release/wn32lib.lib")
#endif
int _tmain(int argc, _TCHAR* argv[])
{
	int result = WN_Add(1, 5);
	printf("result = %d\n", result);
	WN_Say();
	getchar();
	return 0;
}
编译连接生成libTest.exe文件,执行结果如下:
欢迎加群交流:C/C++开发交流

VC++:创建,调用Win32静态链接库的更多相关文章
- Qt之创建并使用静态链接库
		
1.创建静态链接库 静态库的工程名字 添加包含的模型 更改一下类的名字 我的静态编译库的工程. 写一个简单的静态哭的代码为后面测试静态库使用 cpp代码: #include "staticb ...
 - VC++ DLL 2 静态链接库
		
这一篇以VS2013为例子介绍怎样编写一个静态链接库和调用. 1.打开VS2013,新建Visual C++ 的win32项目: 新建后工程分支如下: 添加头文件和源文件: 编写头文件和源文件内容: ...
 - Qt 共享库(动态链接库)和静态链接库的创建及调用
		
前言: 编译器 Qt Creator, 系统环境 win7 64 位 1.创建共享库: 新建文件或项目->选择 Library 和 c++ 库->选择共享库->下一步(工程名为 sh ...
 - VC win32 static library静态链接库简单示例
		
中午在宿舍闲来没事,看到网上一篇帖子,关于静态链接库的英文示例.它在.Net上开发,我将其移到VC上开发,因此对其代码做了相应修改.帖子内容如下:(代码我已修改).原帖见:http://msdn.mi ...
 - vc下的静态链接库与动态链接库(一)
		
一.静态库与动态库的区别 目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Lib ...
 - 创建和使用Windows静态链接库
		
首先明确这篇文章的目的,我希望大家能够通过这篇文章了解一下如何在实际工作中创建和使用Windows平台下的静态链接库.关于链接库的概念,希望大家参考维基百科"Library"词条( ...
 - 介绍静态链接库和动态链接库的差别,及在VC++6.0中的建立和使用
		
首先介绍一下链接库:链接库分为动态链接库和静态链接库两种 LIB是静态链接库,在程序编译连接的时候是静态链接,其相应的文件格式是.lib. 即当程序採用静态链接库的时候..lib文件里的函数被链接到终 ...
 - VC++中的C运行时库浅析(控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)
		
1.概论 运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的.C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于 ...
 - Linux环境下c语言静态链接库和动态链接库创建和使用
		
库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀. 面对比一下两者: 静态链接库:当要使用时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功, ...
 
随机推荐
- 数据结构Java版之查找算法(三)
			
关于查找算法,这里只进行两个算法的说明.包括 顺序查找 和 折半查找. 顺序查找: 顺序查找常用于未排序的数据中.查找速度较慢,只能应用于较小的数据量. public int sequentialSe ...
 - Go 语言入门(三)并发
			
写在前面 在学习 Go 语言之前,我自己是有一定的 Java 和 C++ 基础的,这篇文章主要是基于A tour of Go编写的,主要是希望记录一下自己的学习历程,加深自己的理解 Go 语言入门(三 ...
 - macbook配置homebrew
			
打开homebrew官网,https://brew.sh/将安装脚本复制到命令行中,执行即可 命令正在运行,下载应用,如果在安装应用时,下载速度很慢,可以参考https://blog.csdn.net ...
 - js修改Switchery复选框的状态
			
声明一个switchery插件,绑定到一个input上 js代码 var mySwitch = new Switchery($('#blacklist')[0], { size:"small ...
 - C#实现获取当前文件路径的上级路径
			
界面: 声明: textBox1.Text为指定文件路径:string path = @"F:\ABB-pragram\ABB工作站\ABB Station\Systems\Situatio ...
 - cat file |  while read line的问题
			
循环中的重定向 或许你应该在其他脚本中见过下面的这种写法: while read line do … done < file 刚开始看到这种结构时,很难理解< file是如何 ...
 - MediaPlayer: MediaPlayer中的prepare方法和prepareAsync方法的区别
			
prepare方法是将资源同步缓存到内存中,一般加载本地较小的资源可以用这个,如果是较大的资源或者网络资源建议使用prepareAsync方法,异步加载.但如果想让资源启动,即start()起来,因为 ...
 - python代码-leetcode2 链表-两数相加
			
示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 # Definitio ...
 - 总结Lock和synchronized的区别
			
1. Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现,Lock是代码层面的实现. 2. Lock可以选择性的获取锁,如果一段时间获取不到, ...
 - Qt编写控件属性设计器4-加载属性
			
一.前言 控件能加载拖曳拉伸了,这些都是基本的前提工作,接下来的重点就是要动态加载选中控件的属性了,Qt的属性机制那是异常的强大,只能用强大到爆来形容,Qt中编写自定义控件,如果属性都用Q_PROPE ...