当前位置: 首页 > news >正文

CLR中的类型转换

CLR中的类型转换

  • 字符串类型转换
  • 容器类型转换
  • 自定义类型相互转换
  • 项目设置

  • CLR(Common Language Runtime,公共语言运行时)是微软.NET框架的核心组件,是微软对 CLI 标准的具体实现,负责管理和执行托管代码,提供跨语言互操作性、内存管理、安全性等关键服务
  • CLR的类型转换机制是.NET框架中实现类型安全与多语言互操作的核心功能之一
  • 若调试不能命中,可参考 C# 通过 CLR 调用 C++ 代码无法命中断点问题解决
  • CLR中的marshal_as 介绍

字符串类型转换

  • marshal_as 是 C++/CLI 中用于数据类型转换的工具,用于托管代码和非托管代码之间进行数据类型的转换
  • C# 和 C++ 的字符串类型使用marshal_as相互转换
  • 要使用#include <msclr/marshal_cppstd.h> 头文件,以便使用marshal_as函数进行字符串类型转换
#include <msclr/marshal_cppstd.h> 
#include <iostream>

using namespace System;
using namespace msclr::interop;

int main(array<System::String ^> ^args)
{
   
    // 托管到非托管的转换
    System::String^ managedString = "Hello, World!";
    std::string unmanagedString = marshal_as<std::string>(managedString);
    Console::WriteLine("Managed string: {0}", managedString);
    std::cout << "Unmanaged string: " << unmanagedString << std::endl;

    // 非托管到托管的转换
    std::string anotherUnmanagedString = "Hello from unmanaged code!";
    System::String^ anotherManagedString = marshal_as<System::String^>(anotherUnmanagedString);
    Console::WriteLine("Another unmanaged string converted to managed: {0}", anotherManagedString);

    return 0;
}

容器类型转换

  • gcnew 是 C++/CLI(托管 C++)中用于 ​托管堆 上分配内存的关键字,用于创建由 ​垃圾回收器(GC)​ 自动管理的托管对象。与 C++ 的 new 不同,gcnew 分配的内存无需手动释放,由 CLR 的 GC 自动回收,避免内存泄漏风险
  • gcnew 返回的是对象的 ​句柄(Handle)​,用符号 ^ 表示(类似于C++的指针 *)
#include "pch.h"
#include <msclr/marshal_cppstd.h> 
#include <iostream>
#include <vector>

using namespace</

相关文章:

  • 玩转python:通俗易懂掌握高级数据结构:collections模块之deque
  • C++中类对象作为类成员(对象成员/成员对象)的一些注意事项
  • vue2的webpack(vue.config.js) 怎么使用请求转发 devServer.proxy
  • AGI大模型(5):提示词工程
  • ubuntu20.04
  • 铁人三项(第五赛区)_2018_rop题解
  • 《算法笔记》8.1小节——搜索专题->深度优先搜索(DFS)问题 D: 【递归入门】n皇后 问题(原始的8皇后问题)
  • 我又又又又又又更新了~~纯手工编写C++画图,有注释~~~
  • 【C#】使用DeepSeek帮助评估数据库性能问题,C# 使用定时任务,每隔一分钟移除一次表,再重新创建表,和往新创建的表追加5万多条记录
  • USER与多组织关联的SQL查询以及几个关键函数用法
  • ​面向对象与面向过程编程:从概念到实战的深度解析
  • ROS学习过程(一)
  • unity几种设计模式(自用)
  • 【复习】补充
  • Cookie与Session详解
  • C++ string
  • ES6(1) 简介与基础概念
  • 计算机二级——Python:Day1
  • 力扣215.数组中的第K个最大元素--堆排序法(java)
  • 透过安全事件看软件组成分析SCA
  • 网站开发设计工程师工作前景/集合竞价口诀背熟6句
  • js网站变灰色代码/站长seo综合查询
  • 北京网站建设降龙/东莞网络推广营销公司
  • 移动端 pc网站开发/qq推广软件
  • 真做视频网站/seo关键词分析表
  • 站长工具最近查询/网站备案查询官网