C++(/clr)托管类型与非托管类型互相转换

本文介绍了托管代码与非托管代码间的字符串及对象转换方法。包括从托管类型转换为非托管类型的字符串函数,反之亦然;并提供了从_variant_t类型转换为object对象及相反方向的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
 
2011-07-25 17:15

1. 字符窜之间的转换

1// 托管类型到非托管类型
2 inline cstring managetounmanagestr(system::string^ cmstr)
3{
4using namespace system::runtime::interopservices;
5 cstring cstr = (char*)(marshal::stringtohglobalansi(cmstr)).topointer();
6return cstr;
7}
8
9 // 非托管类型到托管类型
10 inline system::string^ unmanagetomanagestr(const cstring& cstr)
11{
12const char* cc = (lpctstr)cstr;
13 system::string^ cmstr = gcnew system::string(cc);
14return cmstr;
15}


2. 对象之间的转换

1// _variant_t到object对象
2 inline system::object^ vartoobject(_variant_t var)
3{
4using namespace system::runtime::interopservices;
5 system::intptr^ pvar = gcnew system::intptr(&var);
6 system::object^ obj = marshal::getobjectfornativevariant(*pvar);
7return obj;
8}
9
10 // object对象到_variant_t
11 inline _variant_t* objecttovar(system::object^ obj)
12{
13using namespace system::runtime::interopservices;
14 _variant_t* vt =new _variant_t();
15 system::intptr^ pvar = (gcnew system::intptr((void*)vt));
16 marshal::getnativevariantforobject(obj,*pvar);
17return vt;
18}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值