如何:使用 /clr 编译 MFC 和 ATL 代码

此主题讨论如何将现有 MFC 和 ATL 程序编译到目标公共语言运行时。

使用 /clr 编译 MFC 可执行文件或规则 DLL

  1. 在**“解决方案资源管理器”中右击此项目,然后单击“属性”**。

  2. 在**“项目属性”对话框中,展开“配置属性”旁边的节点,然后选择“常规”。 在右侧窗格中的“项目默认值”下,将“公共语言运行时支持”设置为“公共语言运行时支持 (/clr)”**。

    在同一窗格中,确保**“MFC 的使用”已设置为“在共享 DLL 中使用 MFC”**。

  3. 在**“配置属性”下,展开“C/C++”旁边的节点并选择“常规”。 确保“调试信息格式”已设置为“程序数据库 /Zi”(而不是“/ZI”**)。

  4. 选择**“代码生成”节点。 将“启用最小重新生成”设置为“否(/Gm-)”。 另外,将“基本运行时检查”设置为“默认”**。

  5. 在**“配置属性”下,选择“C/C++”,然后选择“代码生成”。 确保“运行库”已设置为“多线程调试 DLL (/MDd)”“多线程 DLL (/MD)”**。

  6. 在 Stdafx.h 中,添加下面一行代码。

    #using <System.Windows.Forms.dll>
    

使用 /clr 编译 MFC 扩展 DLL

  1. 按照“使用 /clr 编译 MFC 可执行文件或规则 DLL”中的步骤执行操作。

  2. 在**“配置属性”下,展开“C/C++”旁边的节点并选择“预编译头”。 将“创建/使用预编译头”设置为“不使用预编译头”**。

    此外,还可以在**“解决方案资源管理器”中右击 Stdafx.cpp,然后单击“属性”。 在“配置属性”下,展开“C/C++”旁边的节点并选择“常规”。 将“具有公共语言运行时支持的编译”设置为“无公共语言运行时支持”**。

  3. 对于包含 DllMain 及其调用的任何内容的文件,在**“解决方案资源管理器”中右击该文件,然后单击“属性”。 在“配置属性”下,展开“C/C++”旁边的节点并选择“常规”。 在右侧窗格中的“项目默认值”下,将“具有公共语言运行时支持的编译”设置为“无公共语言运行时支持”**。

使用 /clr 编译 ATL 可执行文件

  1. 在**“解决方案资源管理器”中右击该项目,再单击“属性”**。

  2. 在**“项目属性”对话框中,展开“配置属性”旁边的节点,然后选择“常规”。 在右侧窗格中的“项目默认值”下,将“公共语言运行时支持”设置为“公共语言运行时支持 (/clr)”**。

  3. 在**“配置属性”下,展开“C/C++”旁边的节点并选择“常规”。 确保“调试信息格式”已设置为“程序数据库 /Zi”(而不是“/ZI”**)。

  4. 选择**“代码生成”节点。 将“启用最小重新生成”设置为“否(/Gm-)”。 另外,将“基本运行时检查”设置为“默认”**。

  5. 在**“配置属性”下,选择“C/C++”,然后选择“代码生成”。 确保“运行库”已设置为“多线程调试 DLL (/MDd)”“多线程 DLL (/MD)”**。

  6. 对于 MIDL 生成的每个文件(C 文件),在**“解决方案资源管理器”中右击相应文件,然后单击“属性”。 在“配置属性”下,展开“C/C++”旁边的节点并选择“常规”。 将“具有公共语言运行时支持的编译”设置为“无公共语言运行时支持”**。

使用 /clr 编译 ATL DLL

  1. 按照“使用 /clr 编译 ATL 可执行文件”部分中的步骤执行操作。

  2. 在**“配置属性”下,展开“C/C++”旁边的节点并选择“预编译头”。 将“创建/使用预编译头”设置为“不使用预编译头”**。

    此外,还可以在**“解决方案资源管理器”中右击 Stdafx.cpp,然后单击“属性”。 在“配置属性”下,展开“C/C++”旁边的节点并选择“常规”。 将“具有公共语言运行时支持的编译”设置为“无公共语言运行时支持”**。

  3. 对于包含 DllMain 及其调用的任何内容的文件,在**“解决方案资源管理器”中右击该文件,然后单击“属性”。 在“配置属性”下,展开“C/C++”旁边的节点并选择“常规”。 在右侧窗格中的“项目默认值”下,将“具有公共语言运行时支持的编译”设置为“无公共语言运行时支持”**。

请参见

概念

混合(本机和托管)程序集