vs2008中的MFC用共享DLL和静态中使用MFC,遇到的问题

最近调试一个项目,VS2008的MFC系统,里面用到了很多开源(后面调试问题时以为是开源库的问题,其实没有关系)。

问题是这样的,系统在我机器上用vs2008编译好运行正常,然后移到另外一个没有装VS2008的机器上不能运行。

调试过程中的一系列方法:

1、下载VC运行库,安装后,重启,问题依然在。

2、下载VS2008的VC CRT运行时库,安装后,重启,问题依然存在。

3、安装VS2008 ,问题解决》

说明肯定缺少 VS2008中的库。

4、进一步缩小问题原因,

只安装了VS2008安装包中的 Visual C++静态多线程CRT库, 问题解决。

但是发布的时候,给客户安装系统的时候,不可能把VS2008安装,所以继续查找原因。

5、请教好介个大神、查找网上资料,确定具体的原因。

系统配置属性,在共享库DLL中使用MFC、在静态库中使用MFC 有区别的。

常规->MFC的使用 代码生成->运行库
在共享DLL中使用MFC 多线程DLL(/MD)
在静态库中使用MFC 多线程调试(/MTD)

区别:(1)、在共享库中使用MFC,没有把系统VC的CRT运行库,编译到可执行文件中,可执行文件相对较小,但移植到别的电脑中若缺少CRT运行库,就不能运行。

(2)、在静态库中使用MFC,是把系统VC的CRT运行库,以静态的方式编译到可执行文件中,相对可执行文件比较大,但是移植到另一个电脑中,可以不需要CRT运行库,就可以直接运行。

若果发布,建议使用第二种。

参考网址资料:http://www.cnblogs.com/lidabo/p/3154680.html

VS2008生成的程序无法在其它电脑上运行,提示系统无法执行指定的程序

http://blog.csdn.net/cqyczw12/article/details/7975172

时间: 2024-10-16 04:55:08

vs2008中的MFC用共享DLL和静态中使用MFC,遇到的问题的相关文章

关于MFC共享DLL的模块状态切换 .

什么是模块状态? 在每个模块(EXE或DLL)中,都存在一种全局的状态数据,MFC依靠这种全局的状态数据来区分不同的模块,以执行正确的操作.这种数据包括:Windows实例句柄(用于加载资源),指向应用程序当前的CWinApp和CWinThread对象的指针,OLE模块引用计数,以及维护Windows对象句柄与相应的MFC对象实例之间连接的各种映射等.但当应用程序使用多个模块时,每个模块的状态数据不是应用程序范围的.相反,每个模块具有自已的MFC状态数据的私有副本.这种全局的状态数据就叫做MFC

MFC的规则DLL与扩展DLL

一.MFC规则DLL MFC规则DLL可以在该dll内部使用MFC,但是与应用程序的接口不能是MFC的.能够被所有支持dll的编程语言所写的应用程序使用,当然也包括使用MFC创建的应用程序.在这种动态链接库中包含一个从CWinApp中继承而来的类,DllMain函数也被隐藏在其中了. 规则DLL包含俩类——静态链接到MFC上和动态连接到MFC上.静态链接到MFC上的规则DLL与MFC静态链接,将MFC的dll代码直接生成在该.dll中,在调用该dll时,使用的是该dll的资源句柄 :动态链接到M

在共享DLL中使用MFC 和在静态库中使用MFC的区别

使用VS2008,在项目属性中有一项MFC的使用,有三种设置: 1.使用标准Windows库 2.在共享DLL中使用MFC 3.在静态库中使用MFC 第一种顾名思义. 第二种指的是打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件. 第三种是将DLL中的相关代码写进EXE文件中,文件较大,但是可以在没有相关DLL的机器上运行. 同时,如果程序本来是第二种方式,发给同事,在同事机器上运行时,可能会出现错误: “无法启动程序……,由于

MFC动态调用dll到指定的进程中(win7系统vs2013环境下)

一.主程序 1.新建一个MFC项目,类型选择基于对话框 2.写一个简单的窗体 点击启动事件 MessageBox(L"调用Dll到程序中成功."); 二.要调用的Dll 1.新建一个win32dll 选择dll.勾选导出符号 1.生成Dll项目 此时会在主程序Main的debug文件夹中生成了Dll.dll和Dll.lib文件 三.配置主程序Main的属性 1.选择链接器--输入--附加依赖项:Dll.lib 1.选择连接器--输入--常规--附加库目录:..\Debug 1.包含头文

四种DLL:NON-MFC DLL, Regular DLL Statically/Dynamically Linked to MFC, MFC Extension DLL

参考资料: https://msdn.microsoft.com/en-us/library/30c674tx.aspx 在上面给出的MSDN链接中,你可以看到四种DLL的定义.这里就不赘述.捡重点的说 区别就在于: NON-MFC DLL内部不能使用MFC(当然其导出的API也不能涉及MFC).(这里我说“导出的API”是指导出的C函数.C++类或者共享的全局变量等等) Regular DLL Statically/Dynamically linked to MFC内部可以使用MFC,但是其导

MFC下的DLL编程学习

1.DLL库与LIB库对比: 静态链接库Lib(Static Link Library),是在编译的链接阶段将库函数嵌入到应用程序的内部.如果系统中运行的多个应用程序都包含所用到的公共库函数,则必然造成很大的浪费.这样即增加了链接器的负担,也增大了可执行程序的大小,还加大了内存的消耗.Lib的好处是应用程序可以独立运行,而不需要在操作系统中另外安装对应的DLL. 而DLL采用动态链接,对公用的库函数,系统只有一个拷贝(一般是位于系统目录的*.DLL文件),而且只有在应用程序真正运行阶段调用时,才

如何在Exe和BPL插件中实现公共变量共享及窗口溶入技术Demo源码

1.Delphi编译方式介绍: 当我们在开发一个常规应用程序时,Delphi可以让我们用两种方式使用VCL,一种是把VCL中的申明单元及实现单元全部以静态编译的方式编译并链接进Exe可执行文件中,这样做的好处就是发布程序时只需要发布独立的可执行文件,当我们使用了的第三方DLL.OCX等时,无需发布*.bpl等文件,但EXE程序文件的体积会较大. 另外一种是把VCL库以运行时状态(即把VCL库中的申请单元静态编译进EXE可执行文件,而单元的实行方法则通过LoadLiabary/LoadPackag

XP中如何配置和共享打印机

Win XP中如何配置和共享打印机 一.配置 打印机 在"控制面板"打开"打印机和传真",在左边的选项或单击右键选择"添加打印机": 2)点击"下一步" 3)接着点击"下一步":注意:在上图中一定不能选择"自动检测并安装即插即用的打印机"这个复选框(如图2): 4)做如上图选择后,点击"下一步": 6)填好资料后点击"下一步":注:上图中"

共享访问在.NET中的编程实现

转载:http://blog.csdn.net/zhzuo/article/details/1732937 共享访问在.NET中的编程实现 发布日期:2007-08-08 | 更新日期:2009-03-15 作者:郑佐 摘要:本文简单介绍在.NET中如何通过API实现局域网共享访问编程. 本页内容 概述 API介绍 代码实现 应用示例 结束语 概述 一般用户在访问局域网中的计算机时都需要提供访问凭据,如果想通过编程来实现自动登录,.NET开发人员一般首先会想到通过调用WMI来实现.但是在实现过程