我正在将一些遗留应用程序更新到Visual Studio 10并且在链接器地狱中。所有这些DLL都从CWinApp派生类,并使用AfxGetApp()来访问该对象。当我链接DLL时,我得到未解析的外部,看起来像全局静态对象,将被普通应用程序的main()拉入:
Shell.lib(SHELL.obj) : error LNK2001: unresolved external symbol "public: static struct CRuntimeClass const CException::classCException" (?classCException@CException@@2UCRuntimeClass@@B)
Shell.lib(SHELL.obj) : error LNK2001: unresolved external symbol "public: static struct CRuntimeClass const CFrameWnd::classCFrameWnd" (?classCFrameWnd@CFrameWnd@@2UCRuntimeClass@@B)
Shell.lib(SHELL.obj) : error LNK2001: unresolved external symbol "public: static class CRect const CFrameWnd::rectDefault" (?rectDefault@CFrameWnd@@2VCRect@@B)
我目前忽略默认库和其他库的组合(你可以轻松谷歌找到链接器地狱答案的方法)是:msvcprtd.lib,mfc100d.lib,mfcs100d.lib,libcmtd.lib
当我添加nafxcwd.lib(mfc库)时,这三个外部符号会解析但最终会出现一堆其他重复符号(需要使用/ FORCE:MULTIPLE),并且在结束时___argc和___argv将无法解析。
所以基本的问题是:你能在VS10中链接一个包含CWinApp的DLL吗?你如何设置链接器呢?
答案 0 :(得分:0)
您可以在VS10中链接包含CWinApp的DLL吗?
当我在Visual Studio 10中创建一个新项目并使用MFC DLL模板时,我发现模板代码本身包含一个派生自CWinApp的类。当然模板编译和链接很好,所以这个问题的答案是肯定的。
我搜索了链接器抱怨的那些对象的定义,并在afx.h和afxwin.h中找到它们,在Visual Studio的include目录中,与Visual包含的其余ATL和MFC代码打包在一起Studio安装时。
您是否偶然使用快递版? Visual Studio 2010的Express版和专业版之间的一些差异是ATL和MFC应用程序无法在快速版中编译。你必须使用专业版。