【发布时间】:2017-03-18 00:13:14
【问题描述】:
我已经搜索但没有找到有意义的解释,比如效果是什么,机制,所以我可以理解它。一个“有意义的解释”的例子,网上有不少资料解释_DEBUG预处理器,如何打开它会允许assert等等。
MSDN page #1 Building Settings for an MFC DLL for Visual Studio 6.0 说这不适用于 1) 常规 DLL,需要静态链接到 MFC,但需要 2) 常规 DLL,使用共享的 MFC DLL,或者,对于 3) 扩展 DLL。但没有进一步的解释。
MSDN page #2 AFXDLL Versions 简要提及:
而不是通过静态链接到 MFC 来构建您的应用程序 目标代码库,您可以构建您的应用程序以使用其中之一 AFXDLL 库,其中包含多个运行的 DLL 中的 MFC 应用程序可以共享。有关 AFXDLL 名称的表,请参阅 DLL:命名 约定。
注意:默认情况下,MFC 应用程序向导会创建一个 AFXDLL 项目。要改为使用 MFC 代码的静态链接,请将 Use MFC 设置为 MFC 应用程序向导中的静态库选项。静态链接 在 Visual C++ 标准版中不可用。
,但我什至不确定这个AFXDLL 是否与_AFXDLL 预处理器有关。
Stackoverflow 帖子 Unexplainable error "Please use the /MD switch for _AFXDLL builds" 和 #error Please use the /MD switch for _AFXDLL builds 解释说 /MT 或 /MTd 与 _AFXDLL 冲突,但这与 MSDN 页面 #1 相同,没什么新意。
谁能解释一下
-
_AFXDLL预处理器是什么意思?最初的动机? - 它对编译或链接有何影响?
- 是否已过时?
-
_AFXDLL预处理器是否与AFXDLL库相关?实际上,这个所谓的“AFXDLL 库”是什么?
【问题讨论】:
-
只是一个有根据的猜测:当您针对 AFXDLL 进行编译时,编译器不是定义了
_AFXDLL吗?这样您就可以添加与目标相关的功能。 -
什么是 AFXDLL?
-
如文档所述,当您使用 MFC 库时,您可以将它们静态链接到您的可执行文件,也可以从共享 DLL 中使用它们。通过 AFXDLL 构建,您将在共享 DLL 中使用它们。
-
"来自共享 DLL"... 哪个 DLL?如果我不是在开发DLL,而是EXE,我应该设置
_AFXDLL吗? -
这个概念是当你使用一个库时,会有很多你已经实现的编译代码。例如,当您使用 MFC 类时,它们将在某处实现,而不是在 您的 代码中。这些实现必须与您的可执行文件链接才能工作。您可以通过不同的方式实现此目的,一种方法是将 MFC 代码与您的可执行文件静态链接,这意味着编译后的代码将添加到您的 exe 中并成为其中的一部分。您可以使用您正在使用的 MFC 代码发送您的 exe。