Visual C++如何迁移到/CLR

转载 2007年09月26日 11:42:00
使用 /clr 编译库项目的已知问题
使用 Visual C++ 2005 进行编译使用 Visual C++ 2005 进行编译
 将 C 代码转换为 C++ 代码

尽管 Visual C++ 2005 能够编译 C 文件,但需要将它们转换为 C++ 才能进行 /clr 编译。不必更改实际文件名,可以使用 /Tp(请参见

C 代码在编译为 C++ 文件时很可能需要更改。C++ 类型安全规则是严格的,所以必须使用强制转换进行显式类型转换。例如,malloc 返回一个 void 指针,但可以使用强制转换将其分配给一个指向 C 中任一类型的指针:

函数指针在 C++ 中也是严格类型安全的,所以下面的 C 代码需要修改。在 C++ 中,最好创建一个定义函数指针类型的 typedef,然后使用该类型强制转换函数指针:

C++ 还要求这些函数是原型或完全定义的,才可以引用或调用它们。

如果 C 代码中使用的标识符恰好是 C++ 中的关键字(如 virtualnewdeletebooltruefalse 等),必须重命名这些标识符。这通常可以使用简单的搜索和替换操作来完成。

最后,尽管 C 样式的 COM 调用需要显式使用 v-table 和 this 指针,但是 C++ 不需要:

/Tc、/Tp、/TC、/TP(指定源文件类型))。请注意,尽管 /clr 需要 C++ 源代码文件,但是不必重构您的代码来使用面向对象的范例。
重新配置项目设置重新配置项目设置

您的项目在 Visual C++ 2005 中编译和运行后,您应当为 /clr 创建新的项目配置,而不是修改默认配置。/clr 与某些编译器选项不兼容,创建单独的配置可使您将项目生成为本机或托管的。当在属性页对话框中选择了 /clr 时,将禁用与 /clr 不兼容的项目设置(如果随后取消选择 /clr,禁用的选项不会自动还原)。

创建新的项目配置

更改项目设置

预编译头

“新建项目配置”对话框 中的“从此处复制设置”选项来创建基于现有项目设置的项目配置。对“调试”配置和“发布”配置各执行一次该操作。然后,后面的更改可仅应用于特定于 /clr 的配置,而保留原始项目配置不变。
修复错误修复错误

使用 /clr 进行编译可能导致编译器错误、链接器错误或运行时错误。本节讨论最常见的问题。

元数据合并

加载程序锁死锁

数据导出

类型可见性

浮点和对齐问题

COM 初始化

性能问题

程序在关闭时出现故障

混合程序集的初始化
请参见请参见

C++/CLR Windows界面编程(一·)

C++/CLR Windows界面编程前言 VS2013 创建CLR 窗口项目 CLR去除黑窗口

混合语言编程:启用CLR(公共语言运行时编译)让C#调用C++

让C#调用C++前言关于混合C#和C++的编程方式,本人之前写过一篇博客(参见混合语言编程:C#使用原生的Directx和OpenGL),在之前的博客中,介绍了在C#的Winform和WPF下使用原生...
  • taonull
  • taonull
  • 2016年09月21日 11:41
  • 1500

C++/CLR 中的多线程使用方法

C++/CLR 中的多线程使用方法本文由Monkey Man 撰写于 2015/7/10 0:41:33 在编写大型程序时,将所有任务都放在一条线程上来完成并不是一个明智的选择,因为程序一旦卡死在某个...

托管C++、C++/CLI、CLR

1、什么是托管C++?   在回答这个问题,首先要搞清楚什么是"托管"(Managed)。托管是.NET的一个专门概念,它是融于通用语言运行时(CLR)中的一种新的编程理念,因此我们完全可以把"...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

关于Visual C++ 的ATL.MFC.CLR对比

       MFC、ATL和CLR是VC2005内置的3大库,涵盖了windows的各种开发方法和开发应用。当然关于C++开发的库不止这3个,不过这3个是微软推荐。从编程所处层次而言,WIN32为最...

C#/C++/CLI运行效率测试之一: C#通过CLR/C++调用Native CPP 类

综述 : 本文章介绍.Net 环境下C# 通过托管C++调用本地C++ Dll文件, 示例环境为:VS2010, .Net4.0, Win7. 具体事例为测试C++, C#, 及C#调用本地C++...
  • chifuqi
  • chifuqi
  • 2011年12月29日 20:59
  • 7161

有多少人在使用C++/CLR?

    原创文章,转载请注明出处:blog.csdn.net/sjdev每年的编程语言排行榜出来以后,都照例会有人对编程语言现状进行概述并对未来的趋势做简要预测。如果有人胆敢以“XXX语言已死,@@@...
  • sjdev
  • sjdev
  • 2010年02月08日 19:47
  • 20029

CLR C++ 托管与非托管

一.将源代码编译成托管代码 1, CLR(Common Language Runtime)公共语言运行时是一个可由多种语言使用的“运行时”,CLR的核心功能(比如内存管理,程序集加载,安全性,异常处...

如何删除属性页和属性表单中的帮助按钮

在默认情况下,属性页对话框默认的样式可能会包含“帮助”个按钮,如果不需要这个“帮助”按钮我们可以通过修改CPropertySheet类的m_psh成员函数中的dwFlags值,同时修改CPropert...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Visual C++如何迁移到/CLR
举报原因:
原因补充:

(最多只允许输入30个字)