vc 动态链接库编程

---恢复内容开始---

  学习vc,避免不了的要用到库函数。今天在群里有人问,c++写的dll,在vb里面是不是可以调用。正好自己这方面的知识也有些匮乏,所幸今天整理一下,供各位学习之用。

  DLL(Dynamic Linkable Library)就是一个库,可以提供给你一些变量,类或函数。在库的发展史上经历了“无库-静态库-动态库”发展历程。

  静态链接库是lib,动态链接库dll,都是实现代码共享。lib的指令都包含在exe文件中了,dll则不必包涵在exe中,exe执行是可以动态的引用和卸载与exe独立的dll文件。还有区别是静态库中不允许含有其他的静态或者动态库,dll则还可以再包含动态库和静态库。

 对动态链接库需要如下认识:

1)与编译器器和编写语言无关

只要遵循约定的dll接口编程规范和调用方式,各种语言写的dll都可以互相调用。譬如windows 系统提供的api,任何语言都可以调用不管是vc,vb还是delphi.

2)常见动态链接库

在windows系统system32里面有kernel32.dll,user32,gui32.dll。windowsAPI大都包含这些dll.kernel32.dll主要是处理内存管理和进程调度,user32.dll主要是与用户界面的交互,gui32.dll主要是负责绘图方面的操作。

常用的messagebox就包含在user32.dll里面

3)vc动态库的分类

 vc支持三种动态链接库Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL).

非mfc动态库不采用mfc类库结构,导出函数提供的是C接口,可以被非mfc程序和mfc程序调用,mfc扩展dll采用mfc动态链接版本创建,只能被mfc类库编写的程序调用。mfc规则dll包含一个继承自Cwinapp的一个类,但是无消息循环。

静态链接库:

在vc 中新建一个静态链接库,并创建lib.c和lib.h,源代码如下

lib.h

#ifndef LIB_H

#define LIB_H

extern "C"  int add(int x,int y);//声明为C编译,连接方式的外部函数

#endif

lib.c

#include "lib.h"

int add(int x,int y)

{

return x+y;

}

编译这个工程就可以得到一个.lib文件了,该文件就是一个库函数,提供了add功能,将.lib文件和头文件交给用户,用户就可以使用add函数了。下面来看看怎么使用这个库,在刚才的工程所在的工作区里新建一个工程libcall,包含一个main.c文件,他演示了静态链接库的调用方法。

#include<stdo.h>

#include "..\lib.h"

#pragma comment (lib,"..\\debug\\libTest.lib"); //指定与静态库一起链接

int main(int argc,char* argv[])

{

printf("%d",add(2,3));

}

静态链接库的调用就是这么简单,或许我们每天都在用,可是我们没有明白这个概念。代码中#pragma comment( lib , "..\\debug\\libTest.lib" )的意思是指本文件生成的.obj文件应与libTest.lib一起连接。

未完。。。待续

 

 

---恢复内容结束---

posted @ 2013-01-10 11:42  酷酷虫  阅读(389)  评论(0编辑  收藏  举报