如何:使用 /clr 编译 MFC 和 ATL 代码
本主题讨论如何编译现有的 MFC 和 ATL 程序以面向公共语言运行时。
使用 /clr 编译 MFC 可执行文件或常规 MFC DLL
右键单击“解决方案资源管理器”中的项目,然后单击“属性” 。
在“项目属性”对话框中,展开“配置属性”旁边的节点,然后选择“常规”。 在右窗格中的“项目默认值”下,将“公共语言运行时支持”设置为“公共语言运行时支持 (/clr)”。
在同一窗格中,确保“使用 MFC”设置为“在共享 DLL 中使用 MFC”。
在“配置属性”下,展开“C/C++”旁边的节点,然后选择“常规”。 确保将“调试信息格式”设置为“程序数据库 /Zi”(而不是 /ZI)。
选择“代码生成”节点。 将“启用最小重新生成”设置为“否(/Gm-)”。 还要将“基本运行时检查”设置为“默认”。
在“配置属性”下,选择“C/C++”,然后选择“代码生成”。 确保“运行时库”设置为“多线程调试 DLL (/MDd)”或“多线程 DLL (/MD)”。
在 Stdafx.h 中,添加以下行。
#using <System.Windows.Forms.dll>
使用 /clr 编译 MFC 扩展 DLL
按照“使用 /clr 编译 MFC 可执行文件或常规 MFC DLL”中的步骤进行操作。
在“配置属性”下,展开“C/C++”旁边的节点,然后选择“预编译头”。 将“创建/使用预编译头”设置为“不使用预编译头”。
或者,在解决方案资源管理器中,右键单击 Stdafx.cpp,然后单击“属性”。 在“配置属性”下,展开“C/C++”旁边的节点,然后选择“常规”。 将“使用公共语言运行时支持进行编译”设置为“无公共语言运行时支持”。
对于包含 DllMain 及其调用的任何内容的文件,在解决方案资源管理器中,右键单击该文件,然后单击“属性”。 在“配置属性”下,展开“C/C++”旁边的节点,然后选择“常规”。 在右窗格中的“项目默认值”下,将“使用公共语言运行时支持编译”设置为“无公共语言运行时支持”。
使用 /clr 编译 ATL 可执行文件
在解决方案资源管理器中,右键单击你的项目,再单击“属性” 。
在“项目属性”对话框中,展开“配置属性”旁边的节点,然后选择“常规”。 在右窗格中的“项目默认值”下,将“公共语言运行时支持”设置为“公共语言运行时支持 (/clr)”。
在“配置属性”下,展开“C/C++”旁边的节点,然后选择“常规”。 确保将“调试信息格式”设置为“程序数据库 /Zi”(而不是 /ZI)。
选择“代码生成”节点。 将“启用最小重新生成”设置为“否(/Gm-)”。 还要将“基本运行时检查”设置为“默认”。
在“配置属性”下,选择“C/C++”,然后选择“代码生成”。 确保“运行时库”设置为“多线程调试 DLL (/MDd)”或“多线程 DLL (/MD)”。
对于每个 MIDL 生成的文件(C 文件),右键单击解决方案资源管理器中的文件,然后单击“属性”。 在“配置属性”下,展开“C/C++”旁边的节点,然后选择“常规”。 将“使用公共语言运行时支持进行编译”设置为“无公共语言运行时支持”。
使用 /clr 编译 ATL DLL
按照“使用 /clr 编译 ATL 可执行文件”部分中的步骤进行操作。
在“配置属性”下,展开“C/C++”旁边的节点,然后选择“预编译头”。 将“创建/使用预编译头”设置为“不使用预编译头”。
或者,在解决方案资源管理器中,右键单击 Stdafx.cpp,然后单击“属性”。 在“配置属性”下,展开“C/C++”旁边的节点,然后选择“常规”。 将“使用公共语言运行时支持进行编译”设置为“无公共语言运行时支持”。
对于包含 DllMain 及其调用的任何内容的文件,在解决方案资源管理器中,右键单击该文件,然后单击“属性”。 在“配置属性”下,展开“C/C++”旁边的节点,然后选择“常规”。 在右窗格中的“项目默认值”下,将“使用公共语言运行时支持编译”设置为“无公共语言运行时支持”。