热度 20
2013-12-14 16:50
1202 次阅读|
0 个评论
最近要开发一个小的MFC的测试程序,需要使用动态链接库,在这里把关于静态和动态链接库的生成和使用方法总结如下: 1.静态链接库 生成: 用VC++的工程向导建立一个Win32 Static Library,勾选Precompiled header和MFC support(可以不勾选),新建相应的.h和.cpp文件,在.cpp文件当中编写需要定义的函数,在.h当中正常声明,编译生成.lib文件即可,如果勾选了 Precompiled header,则需要在.cpp文件当中包含 #include "StdAfx.h"。 在生成静态库时,经常容易出现类似如下错误: fatal error C1010: unexpected end of file while looking for precompiled header directive 问题一般发生在:通过添加文件的方式,添加了一些cpp文件到一个MFC的程序,但该cpp文件并不是MFC,而是标准的C++。 解决方案1: 右键单击项目工程中的cpp文件,在菜单Project-Settings-C/C++-Precompile Header,设置为第一项:Not using precompile headers。 解决方案2:在.cpp文件开头添加包含文件stdafx.h。 #include"stdafx.h" 使用静态链接库: 将生成库的.h和.lib两个文件文件拷贝到要使用的工程目录下,将库的.h文件添加到工程目录下,并且在要使用库的cpp文件里面包含库的.h文件,在工程设置里面设置.lib文件的路径:link--general--object/library modules,填写相应的库的lib的名称,以.lib结尾,也可以将库的.lib文件直接通过Add to projects添加到工程当中,就不需要设置路径了。 2.动态链接库 生成: 用VC++的工程向导建立一个Win32 Dynamic-Link Library ,新建.h和cpp文件,需要注意的是在.h文件的函数声明之前处需要在函数名前使用如下的声明:extern "C" _declspec(dllexport) int Add(int a,int b); 不这样声明则无法生成lib文件。 动态链接库和静态链接库的一大区别是DLL的函数实现在DLL文件中,lib文件只是一个存放函数入口地址的库,静态链接库将函数的实现直接放在lib里面。 另外,当需要在DLL中使用类以及导出类时,在声明类时在类名前使用_declspec(dllexport)即可,如class _declspec(dllexport) CMath 如果只想导出成员函数,在相应的函数定义前声明即可。 这样在使用时可以直接定义类的对象,使用所有类成员和函数。 使用: 将.h,.lib,.dll文件拷贝到要使用的工程目录下,在cpp文件里面包含.h并将.h添加到工程,如上设置.lib的路径即可直接在cpp文件当中将dll定义的函数当做全局函数使用。