Marshal类的使用

M a r s h a l 类 的 使 用 Marshal类的使用 Marshal使

https://docs.microsoft.com/zh-cn/dotnet/api/system.runtime.interopservices.marshal?redirectedfrom=MSDN&view=netframework-4.7.2

Marshal就是把一个结构(类)序列化成一段内存,然后送到另一个进程(.net中Application domain)中供另一个进程中的函数使用。

C#中IntPtr类型

用于表示指针或句柄的平台特定类型。

C#中的IntPtr类型被称之为“平台特定的整数类型”,用于本机资源,例如窗口句柄。

C# 中托管和非托管的区别

托管资源指bai的是.NET可以自动进行回收的资源,主要是指托管堆上分配的内存资源。托管资源的回收工作是不需要人工干预的,有.NET运行库在合适调用垃圾回收器进行回收。
非托管资源指的是.NET不知道如何回收的资源,最常见的一类非托管资源是包装操作系统资源的对象,例如文件,窗口,网络连接,数据库连接,画刷,图标等。这类资源,垃圾回收器在清理的时候会调用Object.Finalize()方法。默认情况下,方法是空的,对于非托管对象,需要在此方法中编写回收非托管资源的代码,以便垃圾回收器正确回收资源。

Marshal.AllocHGlobal

1.AllocHGlobal(Int32)

通过使用指定的字节数,从进程的非托管内存中分配内存。

2.AllocHGlobal(IntPtr)

通过使用指向指定字节数的指针,从进程的非托管内存中分配内存。


IntPtr img = (IntPtr) pics[ i ];
byte[] data = new byte[picLength];
Marshal.Copy(img, data, 0, data.length);
using(MemoryStream ms = new MemoryStream(data))
{
  imgbox = Image.FromSteam(ms);
}
                stSaveParam.nHeight = m_stFrameInfo.nHeight;
                stSaveParam.nWidth = m_stFrameInfo.nWidth;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值