天天看点

VC2005/2008 遇到的几个问题

好久没有用VC2005编写MFC了,结果这几天用了下碰到几个问题i:

1:与字符串(比如CString,CFile::Open)有关操作时,char* 不能使用

  简单解决办法,project>properties>configuration properties-->General-->Character set选择非unciode

2:静态链接MFC.DLL时,出现链接错误:

        __cdecl operator new(unsigned int)" ([email protected]@Z) already defined in LIBCMTD.lib

        ........

    解决办法:

go to project>properties>configuration properties>linker>input

add to "Additional dependency" -> Nafxcwd.lib Libcmtd.lib

add to "ignore specific library" -> Nafxcwd.lib;Libcmtd.lib

order of libraries is important( Nafxcwd.lib;Libcmtd.lib).

3:如果拷贝.EXE到其它非VS环境机器时,会说配置不对,此时:

在C:/Program Files/Microsoft Visual Studio 8/VC/redi

st/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT 下找到了下列文件:

msvcm80d.dll

msvcp80d.dll

msvcr80d.dll

Microsoft.VC80.DebugCRT.manifest

把这几个文件拷贝到目标机器上,与运行程序同一文件夹或放到system32下,就可以运行那个程序了。

其他release版,MFC程序什么的都是拷redist下相应文件夹下的文件就可以了,文件夹后都有标识!

方法二:

修改编译选项,将/MD或/MDd 改为 /MT或/MTd,这样就实现了对VC运行时库的静态链接,在运行时就不再需要VC的dll了。

方法三:

工程-》属性-》配置属性-》常规-》MFC的使用,选择"在静态库中使用mfc"

这样生成的exe文件应该就可以在其他机器上跑了。

其中方法一不一定有效,方法三基本上都有效

以下为vs2008解决方法(Csdn上的得分回复):http://topic.csdn.net/u/20090920/23/aa36a092-e30f-4c2b-8cc5-783a8feafdf4.html

------------------------------------------------------------------------------------------------------------------------------

如果你的是MFC程序,直接在 项目 - 属性 - 配置属性 - 常规 - MFC的使用 - 在静态库中使用MFC即可

如果你的是非MFC程序,则在 项目 - 属性 - 配置属性 - C/C++ - 代码生成 - 运行库 - 选择“多线程”或者“多线程调试”即可

---------------------------------------今天重新用了另外一种方法,肯定是可以的------------------------

编译为release版本,然后采用共享程序集的方式来部署,安装vcredist.exe (Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)

即编译好release版本,然后让用户安装vcredist.exe,就可直接运行了

继续阅读