c++ - 可以将 CWinApp 放在 DLL 中吗?

标签 c++ visual-studio-2010 mfc winapi legacy

我正在将一些旧版应用程序更新到 Visual Studio 10,并且处于链接器 hell 。所有这些 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)

我当前忽略默认库和其他库的组合(您可以轻松地通过谷歌找到链接器 hell 的答案的方法)是:msvcprtd.lib,mfc100d.lib,mfcs100d.lib,libcmtd.lib

当我添加 nafxcwd.lib(mfc 库)时,这三个外部符号会解析,但我最终会得到一堆其他重复的符号(需要使用/FORCE:MULTIPLE),最后 ___argc 和 ___argv 变得无法解析。

所以基本问题是:你能在 VS10 中链接一个包含 CWinApp 的 DLL 吗?你如何设置链接器来做到这一点?

最佳答案

Can you link a DLL containing a CWinApp in VS10?



当我在 Visual Studio 10 中创建一个新项目并使用 MFC DLL 模板时,我发现模板代码本身包含一个从 CWinApp 派生的类。当然模板编译和链接很好,所以这个问题的答案是肯定的。

我搜索了链接器提示的那些对象的定义,并在 Visual Studio 的包含目录中的 afx.h 和 afxwin.h 中找到了它们,它们与 Visual Studio 中包含的其余 ATL 和 MFC 代码打包在一起。安装它。

您是否偶然使用了 express 版? Visual Studio 2010 的快捷版和专业版之间的少数区别之一是 ATL 和 MFC 应用程序无法在快捷版中编译。您必须使用专业版。

关于c++ - 可以将 CWinApp 放在 DLL 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2932440/

相关文章:

c# - WM_SIZING 上的 GetClientRect 给出了错误的大小

visual-studio-2010 - 我通过 Nuget 添加了 `Marcos Melis Filehelpers` 并且收到了一个我不明白的警告,这是什么意思?

visual-studio-2010 - 适用于 Visual Studio 2010 项目的 Mercurial .hgignore

visual-studio-2008 - Visual Studio 2010 是否向后兼容 visual studio 2008 的插件?

c++ - 在远程 PC 上进行性能分析

c++ - 防止 MFC 应用程序将光标更改回默认图标

c++ - 如何将 SHFileOperation() 与 CString 路径一起使用

c++ - 反向迭代器算法

C++ 正确的新用法?

C++ - 从 QPushButton 添加项目到 QListWidget