仅将 CString 和 CArray 包含到 C++ 项目中

Posted

技术标签:

【中文标题】仅将 CString 和 CArray 包含到 C++ 项目中【英文标题】:Include only CString and CArray into a C++ project 【发布时间】:2013-08-23 22:53:09 【问题描述】:

说,出于我的目的,我不需要 MFC 库的全部潜力。 (我在 Visual Studio 2008 中使用它的旧版本。)我还需要提到我针对 MFC 库编译我的项目 statically 以最大限度地减少外部 DLL 依赖项的数量。

所以我认为我可以使用简单的 C++ 控制台应用程序项目,但我想从 MFC“借用”两个类:CStringCArray

有没有办法将它们只包含在我的控制台应用程序 C++ 项目中?

【问题讨论】:

为什么要 MFC 类?只需使用 std::stringstd::vector 代替 @Praetorian:是的。我知道。在这一点上,这是一个问题或偏好,或以前的经验。 @ahmd0: IIRC, CArray 无论如何都是错误的。 @MooingDuck:很好奇,CArray 有什么问题? 您可能想要使用这个 CString 克隆:codeproject.com/Articles/1146/CString-clone-Using-Standard-C 当我还在 MFC 中编程时,我在与您需要类似的项目中使用了它。 【参考方案1】:

最好的办法是将这些排除在您的项目之外(我尝试过,因为我喜欢 CString 类)。 CString 的大部分方法都可以用 std::string 和 std::stringstream 代替。

【讨论】:

采纳 Adam Galarneau 的绝妙建议:如果可以避免,请不要使用 MFC! MFC 已过时;您应该真正为任何新代码使用现代 API 和库。恕我直言... 谢谢。正如我上面所说的,我在 MFC 方面有很多经验,在这样一个基础层面上学习新东西会让我慢很多。 微软是否提供std::stringstd::vector?我需要包括什么? #incldue 和 #include ,但我认为 Adam 现在应该获得更多代表,因为它不是 666。;-) 感谢您没有在 666 离开我。=P【参考方案2】:

根据您的具体用例,如果您需要更多 stl,您还可以使用 QString 和 QByteArray。您只需要链接到 qtcore dll,与 MFC 相比,以后在其他平台上使用相同的代码将更加灵活。尽管 STL 也是如此。

【讨论】:

嗯,我想知道为什么替代解决方案得到-1?需要详细说明吗? “我不需要 MFC 库的全部潜力”。如果已经安装了几个 MFC 头文件是多余的,那么安装 QT 的可能性也很大。 但是 Qt 比 MFC 有两个优点:1) 它是跨平台的,2) 它没有过时(是的......)。当然,如果问题是 C++ 中的“数组”和“字符串”,可以说only 合理的答案是“使用 C++ 标准库”。恕我直言... @paulsm4:是的,我什至有条件地写下了我的答案。 Mooing 没有费心去完全理解。【参考方案3】:

使用 CString 不需要 MFC。

如果您#include "atlstr.h",则当前版本的 CString 可用

【讨论】:

是的,我知道。但是CArray呢?

以上是关于仅将 CString 和 CArray 包含到 C++ 项目中的主要内容,如果未能解决你的问题,请参考以下文章

通过 P/Invoke 将 MFC CArray 编组为 C#

CMake 是不是将包含的标头中的所有内容编译到可执行文件中,还是仅将主类中使用的部分编译为可执行文件?

MFC CArray类的基本使用

CArray 和内存预分配

如何仅将字母字符扫描到 C 中的数组中?

当延迟加载禁用时,如何通过实体框架仅将导航属性的特定属性包含到查询中?