MarshalAs(UnmanagedType···特性是干啥的

[MarshalAs(UnmanagedType.啥啥啥)]是提供向非托管代码封送数据时的规则。MSDN上讲的

MSDN上的说明:(此处不要怀疑Attribute可以省略的)
https://docs.microsoft.com/zh-cn/dotnet/api/system.runtime.interopservices.marshalasattribute.-ctor?view=net-5.0

具体举例说明:
比如String或StringBuilder型,传递给非托管代码的时候可能是LPStr LPWStr BStr等等。这时候就可以通过MarshalAs特性告诉.NET应该封送成什么类型给非托管代码去玩。

那么啥又是非托管代码呢?
托管/非托管是微软的.net framework中特有的概念。

非托管代码:也叫本地(native)代码。

托管代码:是由公共语言运行库(CLR)执行的代码,而不是由操作系统直接执行。本地代码经过两次编译,第一次将源代码编译成中间代码(MSIL,MicrosoftIntermediate Language),第二次由.net中的CLR将中间代码编译成机器代码。程序实际上是被“托管”在公共语言运行库中。随着程序集的运行,公共语言运行库会持续地提供各种服 务,例如内存管理、安全管理、线程管理等等。和托管资源/非托管资源不同,不要弄混。

托管代码的优点
1.跨平台。有关内存管理(内存申请,内存释放,垃圾回收之类的)全部都是.net的CLR来管理

2.更加安全,不会出现诸如内存泄露之类的问题

托管代码的缺点
1.对程序的性能也产生一定的影响。CLR首次加载程序集代码时,JIT将IL编译成本地代码时,会对其进行代码优化,这类似与非托管C++编译器的后端所做的事情.这可能也会花费加多的时间生成优化代码。

2.不能直接读取内存,不够灵活

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

金增辉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值