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 System;
using namespace 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qzy0621

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值