我需要将一个非常庞大的 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/