【问题标题】:Sharing source files between projects在项目之间共享源文件
【发布时间】:2014-10-16 05:10:44
【问题描述】:

我有项目A,其中包含具有类定义和实现MyClass.hMyClass.cpp 的源文件。 MyClass 正在使用CString

现在我决定创建一个新项目B,这是一个简单的控制台应用程序,用于测试MyClass 的目的。在解决方案资源管理器中,我从A 项目位置将MyClass 标头和cpp 文件添加到我的项目中。直到此刻我才知道必须使用MFC 才能使用CString。我尝试构建项目并收到错误,据我所知要求使用 MFC。

#error :  Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

为了了解发生了什么,我决定删除 MyClass 并在项目 B 中创建简单的 MyCLass2,该项目也使用 CString。在构建 B 之后,我遇到了类似

的错误
Error   22  error C2061: syntax error : identifier 'CString'    

包含在MyClassMyClass2 中是相同的。

为什么在 MyClass 案例中我被要求添加 MFC lib?我想在这种情况下编译器知道CString 是什么。它是怎么知道的?

当系统不理解CString 是什么时,我期望得到与使用MyClass2 编译时相同的结果。

【问题讨论】:

  • 您可能想要创建一个library,并且您可能想要创建一个共享库。详细信息因操作系统和编译器而异。
  • 项目 A 是 MFC windows 应用程序。项目 B 是控制台应用程序。它们都不是共享库。
  • 但是你可以制作一个通用源代码库。
  • 是的,这可能是解决方案。但是我想使用共享代码样式来防止以后对不同的lib版本产生误解。无论如何,我的问题不是如何解决问题,而是如何理解这种奇怪的 VS 行为。
  • 您的两个项目是否在同一个文件夹中?在第一种情况下,可能是 MyClass 的现有目标文件被重用了。

标签: c++ string visual-c++ mfc


【解决方案1】:

如果在 ATL 应用程序中使用:

CString、CStringA 和 CStringW 从 MFC DLL 导出 (MFC90.DLL),从不来自用户 DLL。这样做是为了防止 CStringT 避免被多重定义。

来源:http://msdn.microsoft.com/en-us/library/5bzxfsea.aspx

如果您想在不链接到 MFC 的情况下使用,则可以使用以下类:CAtlString、CAtlStringA 和 CAtlStringW。

【讨论】:

    【解决方案2】:

    MyClassMyClass2 都包含stdafx.h,这在两个项目中是不同的。 你可以做的是重命名/删除属于项目A的stdafx.h,看看你在哪里得到编译错误。

    【讨论】:

    • 我希望由于 MyClass 在 B 项目中,它必须使用 B 项目的 stdafx.h,例如 MyClass2
    • 然后检查它是否有“Precompiled Header/Use”选项。
    • 我想您已经检查过是否还有其他本地文件可以包含并且具有不同的内容?另请注意,如果 #include "stdafx.h" 不是 cpp 文件中的第一条语句,则本地文件也将包括在内。例如,如果它包含在 MyClass.cpp 中包含的某些 .h 文件中,就会发生这种情况
    • 最终检查是把#error "Wrong stdafx.h included"从项目A的stdafx.h中。
    • 不错的尝试!我得到“包含错误的 stdafx.h”。那么为什么项目 B 包含项目 A 的 stdafx 呢?逻辑在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多