VC调用库文件(dlllib).doc
文本预览下载声明
1.静态库
静态库实例:
step1.在VC++6.0中new一个名称为libTest的static library工程,并新建lib.h和 lib.cpp两个文件,lib.h和lib.cpp的源代码如下:
lib.h
#ifndef?LIB_H#define?LIB_H????extern?C?int?add(int?x,int?y);//声明为C编译、连接方式的外部函数#endif
lib.cpp
#include?stdafx.h#include?lib.hint?add(int?x,int?y){????return?x?+?y;}
编译这个工程在Debug目录下就得到了一个libTest.lib文件,这个文件就是一个函数库,它提供了add的功能。将头文件和.lib文件提交给用户后,用户就可以直接使用其中的add函数了。
step2:下面来看看怎么使用这个库,在libTest工程所在的工作区内new一个libCall工程。新建libCall.cpp文件,它演示了静态链接库的调用方法,其源代码如下:
// libCall.cpp : Defines the entry point for the console application.#include?stdafx.h#include?stdio.h#include?..\lib.h#pragma?comment(?lib,?..\\Debug\\libTest.lib?)int?main(int?argc,?char*?argv[]){????printf(?2 + 3 = %d\n,?add(?2,?3?)?);????return?0;}
代码中#pragma comment( lib , ..\\debug\\libTest.lib )的意思是指本文件生成的.obj文件应与libTest.lib一起连接。
如 果不用#pragma comment指定,则可以直接在VC++中设置,如图2,依次选择tools、options、directories、library files菜单或选项,填入库文件路径。图2中加红圈的部分为我们添加的libTest.lib文件的路径。(此部分经测试,发现编译无法通过)
2.动态库?非MFC DLL
Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。
非MFC动态库不采用MFC类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用;MFC规则DLL 包含一个继承自CWinApp的类,但其无消息循环;MFC扩展DLL采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用程序所调用。
2.1 新建dll
在VC++中new一个Win32 Dynamic-Link Library工程dllTest。注意不要选择MFCAppWizard(dll)。在建立的工程中添加lib.h及lib.cpp文件,源代码如下:
lib.h
#ifndef?LIB_H#define?LIB_H????extern?C?int?__declspec(dllexport)?add(int?x,?int?y);#endif
lib.cpp
#include?lib.hint?add(int?x,?int?y){????return?x?+?y;}
2.2 动态调用dll
建立一个与DLL工程处于同一工作区的应用工程dllCall,它调用DLL中的函数add,dllCall.cpp其源代码如下:
#include?stdafx.h#include?stdio.h#include?windows.htypedef?int(*lpAddFun)(int,?int);int?main(int?argc,?char*?argv[]){????HINSTANCE hDll;?//DLL#190;#228;±ú?????lpAddFun addFun;?//oˉêy#214;#184;#213;#235;????hDll?=?LoadLibrary(..\\Debug\\dllTest.dll);????if?(hDll?!=?NULL)????{????????addFun?=?(lpAddFun)GetProcAddress(hDll,?add);????????if?(addFun?!=?NULL)????????{????????????int?result?=?addF
显示全部