c++-cli - 将 c++ 项目转换为 clr 安全项目

标签 c++-cli porting

我需要将一个非常庞大的 C++ 项目转换为 clr 安全项目。当前的 C++ 项目有很多来自 C++ 的东西,如模板、泛型、指针、存储/流、ole api、zlib 压缩 api、内联等。在哪里可以找到这种类型转换的详细文档?能推荐一些好书可以引用吗?如果你们有人做过这样的转换,我可以得到一些分析吗?

最佳答案

我将直接引用标题为“如何:迁移到/clr:safe”的 MSDN Library 文章

Visual C++ 可以使用/clr:safe 生成可验证组件,这会导致编译器为每个不可验证代码构造生成错误。

以下问题会产生可验证性错误:

  • 原生类型。即使不使用它, native 类、结构、指针或数组的声明也会阻止编译。
  • 全局变量
  • 对任何非托管库的函数调用,包括公共(public)语言运行时函数调用
  • 可验证函数不能包含用于向下转换的 static_cast 运算符。 static_cast 运算符可用于基元类型之间的转换,但对于向下转换,必须使用 safe_cast 或 C 样式转换(作为 safe_cast 实现)。
  • 可验证函数不能包含reinterpret_cast 运算符(或任何C 风格的强制转换等效项)。
  • 可验证函数无法对 Interior_ptr 执行算术运算。它只能分配给它并取消引用它。
  • 可验证函数只能抛出或捕获指向引用类型的指针,因此在抛出之前必须对值类型进行装箱。
  • 可验证函数只能调用可验证函数(不允许调用公共(public)语言运行时,包括 AtEntry/AtExit,因此不允许使用全局构造函数)。
  • 可验证类不能使用 Explicit。
  • 如果构建 EXE,主函数不能声明任何参数,因此必须使用 GetCommandLineArgs 来检索命令行参数。
  • 对虚拟函数进行非虚拟调用。

此外,以下关键字不能在可验证代码中使用:

  • 非托管和打包编译指示
  • 裸露并对齐 __declspec 修饰符
  • __asm
  • 基于__
  • __try 和 __ except

我想这会让你忙碌一段时间。没有什么魔杖可以将原生 C++ 转换为可验证的代码。您确定这值得投资吗?

关于c++-cli - 将 c++ 项目转换为 clr 安全项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3537153/

相关文章:

.net - TLS 1.2 在带有 .NET 4.7 的 Windows 10 中默认不启用

android - 将 iOS 应用程序移植到 Android

docker - 问题 : Porting Docker to a new platform (Tizen 4. 0 + ARM64)

android - 是什么导致信号 'SIGILL' ?

c# - 在 C++/CLI 中使用 EventHandler

c++ - 无法在我的 exe 文件的动态库中找到项目入口点

android - 如何将 android 应用程序移植到黑莓?

c++ - Visual C++ 错误 "cannot convert parameter 1 from ' HANDLE' to 'HANDLE &' "

c++ - Windows 窗体 - 单实例 - 包含语句