mfcdll静态编译
A. vs2013如何静态编译
项目属性-配置属性-常规-MFC的使用-使用标准Windows库(不用MFC)
然后,C/C++-代码生成-运行库-多线程/MT或者多线程调试/MTd
带d的是链接调试版本,DEBUG项目选/MTd,Release项目选/MT
如果使用MFC,在MFC的使用中设置静态、动态链接,代码生成中必须使用<从上级继承>
B. vc++ 2008的dll动态静态编译问题
这个情况有以下几种可能:
你编译的是Debug版本,因此别的计算机(未安装VS2008)上无法运行。请使用Releaset版本
如果是MFC应用程序,请在项目的属性中(Release)的常规中,把【MFC的使用】改为“在静态库中使用MFC”。
如果你的程序调用了其它的第三方库,这些库在编译时用了静态链编,而别的计算机上无此库的dll文件。因此请将相应Dll附带打包进去。
运行时库的问题,修改项目属性中,C++,代码生成中的基本运行时库检查。
C. 如何将MFC程序静态编译
{
for (int i = 0; i < n; i++)
printf("%d%s", a[i], i == n - 1 ? "\n" : " ");
}
D. 已经将mfc动态链接库以静态编译的方式编译,为什么程序还会提示缺少dll
如果丢失,按我说的试试
第一、修复
使用腾讯电脑管家,点开电脑诊所之后,搜缺失的dll文件,会自动筛选出来,然后你只需要点立即修复即可!
第二、下载安装
根据你的系统下载(比如XP或w7),然后点开你的系统盘,点开windows这个文件夹再点开system32这个文件夹,把下载下来的dll文件复制进来就可
E. MFC编程如何把dll封装入exe中
可以把dll以二进制形式写入到exe文件后面(exe允许后边添加任意长度数据 不影响程序的运行)长度为dll大小 在程序初始化的中读取自身文件后偏移dll大小的数据 然后创建这个dll 再loadlibrary 程序退出前deletefile把dll删除 如果不想被发现的话 还可以把dll的属性设置为隐藏或者直接将dll写入到windows目录下
F. 创建mfc项目时,vs提示选择在共享dll中使用mfc与在静态库中使用mfc有什么区别
共享dll方式,你的程序用到的MFC中的执行代码(指目标代码,二进制指令)不会被编译进exe中,当exe执行时会加载mfc中的dll。静态库中使用,编译时会将用到的mfc dll中的代码编译进exe中,exe运行时不在需要mfc的dll
G. vs2010为什么设置了静态编译还是需要dll文件才能运行exe
静态编译:就是在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖动态链接库。
编译方式:
第1种:
设置:
1、项目->配置属性->常规->MFC的使用:在静态库中使用MFC
2、项目 -> 配置属性->C/C++->代码生成->运行库 :选择 多线程调试(/MTd)。
编译时,选择的是debug,win32
然后执行编译生成方案,在该工程目录下的debug文件中,找到该.exe文件,即可在其他电脑运行。
第2种:
一般可以配置一下两项:
1.项目 -> 配置属性->常规->MFC的使用 :在静态库中使用MFC。
2.项目 -> 配置属性->C/C++->代码生成->运行库 :选择 多线程调试(/MT)。
编译时,选择的是release,win32(这个选择项在工具栏的debug选框中,一般我们使用debug方式)
H. VC++6.0如何设置才能静态编译
你在初建的时候有个静态调用dll还是动态调用dll,如果没选,默认好像是动态调用,如果你想改为静态调用就需要自己配制。修改一般可以配置一下两项:
1.项目 -> 配置属性->常规->MFC的使用 :在静态库中使用MFC。
2.项目 -> 配置属性->C/C++->代码生成->运行库 :选择/MT。
I. 怎么让MFC程序不使用静态编译
不使用静态编译,发布时就需要把MFC相关的库带上
J. 静态链接编译通过,使用MFC共享dll编译不过
#ifdef _AFXDLL
#define DECLARE_MESSAGE_MAP() \
private: \
static const AFX_MSGMAP_ENTRY _messageEntries[]; \
protected: \
static AFX_DATA const AFX_MSGMAP messageMap; \
static const AFX_MSGMAP* PASCAL _GetBaseMessageMap(); \
virtual const AFX_MSGMAP* GetMessageMap() const; \
#else
#define DECLARE_MESSAGE_MAP() \
private: \
static const AFX_MSGMAP_ENTRY _messageEntries[]; \
protected: \
static AFX_DATA const AFX_MSGMAP messageMap; \
virtual const AFX_MSGMAP* GetMessageMap() const; \
#endif
#ifdef _AFXDLL
#define BEGIN_MESSAGE_MAP(theClass, baseClass) \
const AFX_MSGMAP* PASCAL theClass::_GetBaseMessageMap() \
{ return &baseClass::messageMap; } \
const AFX_MSGMAP* theClass::GetMessageMap() const \
{ return &theClass::messageMap; } \
AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \
{ &theClass::_GetBaseMessageMap, &theClass::_messageEntries[0] }; \
AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
{ \
#else
#define BEGIN_MESSAGE_MAP(theClass, baseClass) \
const AFX_MSGMAP* theClass::GetMessageMap() const \
{ return &theClass::messageMap; } \
AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \
{ &baseClass::messageMap, &theClass::_messageEntries[0] }; \
AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
{ \
#endif
#define END_MESSAGE_MAP() \
{0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \
}; \