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去除黑窗口
  • u013978977
  • u013978977
  • 2016年07月14日 16:27
  • 4955

VS2015 C++/CLR

VS2010以及以前的版本,创建项目时都可以在CLR下找到“Windows窗体应用程序”的项目模板,但是VS2012以后的版本就没这么方便了。可以通过打开旧版本的项目来修改,也可以像下面这样操作: ...
  • SnailCpp
  • SnailCpp
  • 2016年05月20日 21:27
  • 2107

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

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

C#与C++/CLR及标准C++互调

  • 2017年07月30日 17:20
  • 32KB
  • 下载

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

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

C#调用C++生成的类(通过CLR类库实现)

最近组里的项目需要利用C#调用C++生成的Dll,在网上反复查找资料最后终于实现了,这个过程,现将大致过程整理总结如下。 建立起C#与C++之间的桥梁便是VS中我们不常用的那个CLR类库,我这次...
  • zhuimengshizhe87
  • zhuimengshizhe87
  • 2014年01月06日 20:58
  • 3800

c# c++ 自动接口工具

近来想给写好的C++代码做C#接口,上网查了自动封装的工具。 总结下来有4种方式: 1. 使用invoke方式,就是直接在C#中引用c++写发的dll。这个方法适用于简单情况,复杂情况代码太大。 ...
  • LaineGates
  • LaineGates
  • 2016年05月10日 12:50
  • 2244

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

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

C++/CLR 概念原理

一、CLI简介   CLI:(Common Language Infrastructure,通用语言框架)提供了一套可执行代码和它所运行需要的虚拟执行环境的规范。更通俗的我们可以说它是一个虚拟平台,是...
  • zxxSsdsd
  • zxxSsdsd
  • 2013年07月16日 15:14
  • 1455

C++/CLR 使用VS2015预览版编写Windows窗体应用程序(VS2012、VS2013类似)

简单介绍了Visual Studio在C++/CLR项目下创建Windows窗体应用程序的方法,希望能对初学者有所帮助。...
  • LuoJun_LZ
  • LuoJun_LZ
  • 2015年03月14日 02:25
  • 3651
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Visual C++如何迁移到/CLR
举报原因:
原因补充:

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