好久沒有用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,就可直接運作了