MFC 初学,我在新建小程序新建页面的时候用的是共享DLL工程,完成工程了后想改为静态库

在共享DLL中使用MFC 和在静态库中使用MFC
在共享DLL中使用MFC 和在静态库中使用MFC
编辑:www.fx114.net
本篇文章主要介绍了"在共享DLL中使用MFC 和在静态库中使用MFC",主要涉及到在共享DLL中使用MFC 和在静态库中使用MFC方面的内容,对于在共享DLL中使用MFC 和在静态库中使用MFC感兴趣的同学可以参考一下。
使用VS2008,在项目属性中有一项MFC的使用,有三种设置:   1.使用标准Windows库   2.在共享DLL中使用MFC   3.在静态库中使用MFC   第一种顾名思义。第二种指的是打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件。第三种是将DLL中的相关代码写进EXE文件中,文件较大,但是可以在没有相关DLL的机器上运行。   同时,如果程序本来是第二种方式,发给同事,在同事机器上运行时,可能会出现错误:   “无法启动程序……,由于应用程序配置不正确,未能启动此应用程序。”   我觉得,在开发阶段的程序都选第3种比较好吧,不用管
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:下次自动登录
现在的位置:
& 综合 & 正文
MFC模块的动态链接库DLL以及静态链接库LIB编译后的调用
静态链接库LIB和动态链接库DLL的区别,创建和示例
<span style="color:#.什么是静态连接库,什么是动态链接库
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。
静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。
(若是想在MFC应用程序中调用动态链接库DLL,或静态链接库LIB,又或者是动态链接库DLL中要调用静态链接库LIB的接口,建议在编译链接时,所有模块(exe,dll,lib)要么都是MFC作为共享的DLL,要么都MFC作为静态链接库,或者都用标准的Windows库,总之可执行程序和DLL或LIB中的调用应保持一致。)
静态链接库与静态链接库调用规则总体比较如下:
对于静态链接库(比较简单):首先,静态链接库的使用需要库的开发者提供生成库的.h头文件和.lib文件。
生成库的.h头文件中的声明格式如下:
extern "C" 函数返回类型 函数名(参数表);
在调用程序的.cpp源代码文件中如下:
#include "..\lib.h"
#pragma comment(lib,"..\\debug\\libTest.lib")
//指定与静态库一起链接
第二,因为静态链接库是将全部指令都包含入调用程序生成的EXE文件中。因此如果用的是静态链接库,那么也就不存在“导出某个函数提供给用户使用”的情况,要想用就得全要!要不就都别要!:)
对于动态链接库:
动态链接库的使用需要库的开发者提供生成的.lib文件和.dll文件。或者只提供dll文件。
首先我们必须先注意到DLL内的函数分为两种:
(1)DLL 导出函数,可供应用程序调用;
(2)DLL 内部函数,只能在 DLL 程序使用,应用程序无法调用它们。
因此调用程序若想调用DLL中的某个函数就要以某种形式或方式指明它到底想调用哪一个函数
而对于一个工程模块,我们可以将其编译成动态链接库DLL的文件形式,也可以编译成静态链接库LIB的文件。
若想条件编译的话,可以定义一个标识然后编译的时候设置这个标识一起编译。
#pragma commit( lib, "我的静态库.lib");
#pragma commit( lib, "我的动态库.lib");
若是有需要,想将原来以动态链接库DLL编译的模块,转换成静态链接库LIB的形式,只需要将工程里编译选项改成以静态库方式编译就行。同时修改下DLL中的导出函数的声明为普通函数声明。
同时注意,应用程序中调用静态链接库.lib时,只需要隐式的(即工程配置项里或用#pragma comment)引入.lib文件,因为静态链接库的lib就是其本身,所以这样我们就能直接调用静态链接库里的接口了。【他跟动态链接库DLL在开发角度上,不同的是,DLL需要引入的是链接文件.lib,让编译器能找到DLL中的接口,其他在使用上都一样】
在这提醒下,
静态链接库文件.lib与动态链接库DLL编译时产生的.lib链接文件是不一样的,即便它们在Windows中呈现的文件格式是一样的,动态链接文件.lib里面仅仅只是保存了一些动态链接导出函数的声明,有心的朋友,可以比较下它们的大小,你会发现,动态链接文件.lib跟静态链接库文件.lib比起来小很多。
&&&&推荐文章:
【上篇】【下篇】安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&博客访问: 152019
博文数量: 73
博客积分: 0
博客等级: 民兵
技术积分: 919
注册时间:
我喜欢蓝天,也喜欢雨天。
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: C/C++
参考他人的基础上自己的总结
一、创建动态链接库项目:
1、打开Microsoft Visual Studio 2010,选择File-&New-&Project。
2、在New Project中选择Installed Templates-&Visual C++-&Win32。
3、选择Win32 Console Application,设置名称:simpledll,设置解决方案名:zdddll。
4、单击OK,在出现的Win32 Application Wizard的Overview对话框中点击Next。
5、在Application Settings中,选择Application type下的DLL。
6、勾选Additional options下的Empty project。
7、单击Finish创建项目。
向动态链接库添加类:
1、添加新类头文件。右键单击simpledll项目,Add-&New Item,选择Header File(.h),设置名称为simpledll,单击Add。
2、添加新类源文件。右键单击simpledll项目,Add-&New Item,选择C++ File(.cpp),设置名称为simpledll,单击Add。
3、为新类添加内容。内容如下:
头文件simpledll.h:
//------------------ simpledll.h ----------------
//该宏完成在dll项目内部使用__declspec(dllexport)导出
//在dll项目外部使用时,用__declspec(dllimport)导入
//宏DLL_IMPLEMENT在simpledll.cpp中定义
#ifdef DLL_IMPLEMENT
#define DLL_API __declspec(dllexport)
#define DLL_API __declspec(dllimport)
namespace zdd
class DLL_API SimpleDll
SimpleDll();
~SimpleDll();
int add(int x, int y); //简单方法
源文件simpledll.cpp:
//------------------ simpledll.cpp ----------------
//注意此处的宏定义需要写在#include "simpledll.h"之前
//以完成在dll项目内部使用__declspec(dllexport)导出
//在dll项目外部使用时,用__declspec(dllimport)导入
#define DLL_IMPLEMENT
#include "simpledll.h"
namespace zdd
SimpleDll::SimpleDll()
SimpleDll::~SimpleDll()
int SimpleDll::add(int x, int y)
return x+y;
4、完成后点击Build-&Build Solution,生成解决方案。可在~zdddll\Debug下查看生成的simpledll.lib和simpledll.dll.文件。
二、创建引用动态链接库的应用程序:
1、选择File-&New-&Project。
2、在New Project中选择Installed Templates-&Visual C++-&Win32。
3、选择Win32 Console Application,设置名称:usesimpledll。选择Add to solution。
4、单击OK,在出现的Win32 Application Wizard的Overview对话框中点击Next。
5、在Application Settings中,选择Application type下的Console application。
6、取消Additional options下的Precompiled header,勾选Empty project。
7、单击Finish创建项目。
在控制台应用程序中使用类库的功能:
1、为控制台应用程序添加main.cpp。右键单击usesimpledll项目,Add-&New Item,选择C++ File(.cpp),设置名称为main,单击Add。
2、为main.cpp添加内容。如下所示:
//------------------ main.cpp -------------------
#include "simpledll.h"
#include &iostream&
int main(char argc, char**argv)
cout && "----------------------" &&
cout && "sd.add: 3+5=" && sd.add(3, 5)&&
cout && "sd.getConst(): "&&sd.getConst()&&
SimpleDll *psd = new SimpleD
cout && "psd-&add: 5+5=" && psd-&add(5, 5)&&
cout && "psd-&getConst(): "&&
cout && "----------------------" &&
cout && "please press Enter exit."&&
getchar();
3.在工程目录下建立Include目录,将动态链接库的那个头文件拷入。建立lib目录,将生成的那个.lib文件拷入。然后将生成的.dll文件拷入生成.exe文件的那个目录(一般是项目下的Debug下)。
4.程序中要包含那个头文件,注意路径要写正确。Include “..\Include\simpledll.h”,或者右击工程,property,Configuration Properties,c/c++,General,在Additional Include Directories中加入“;..\Include”,这样包含头文件时直接写头文件名,不需要考虑路径,因为当在工程目录下找不到文件时,就会从添加的那个目录查找文件。
5.添加.lib文件
右击工程,property,Configuration Properties,Linker,Input,在Additional Dependencies中添加.lib路径(一般是..\lib\xxxxx.lib)。
另外,lib引用有两种方法:
1.#pragma comment(lib,”opengl32.lib”)
2.选择project –& XX properties… –& linker –& Input –& Additional dependences,在其中加入lib文件名即可。
首先建立生成DLL的工程,生成.dll,.lib文件。需要用到的还有.h文件。
建立应用DLL的工程。要包含头文件,把3个文件拷入相应的目录。
在附加依赖项Additional Dependencies中添加.lib的路径,告诉程序调用的外部导入函数的地址,否则找不到函数,链接出错。
阅读(43935) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。}

我要回帖

更多关于 微信小程序新建page 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信