marshal:直译为“编排”, 在计算机中特 指将数据按某种描述格式编排出来,通常来说一般是从非文本格式到文本格式的数据转化。
unmarshal是指marshal的逆过程。比如在WebService中,我们需要把java对象以xml方式表示并在网络间传输,把java对象转化成xml片段的过程就是marshal.

微软对C#中Marshal类描述的链接在此;

https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal?view=net-5.0

Provides a collection of methods for allocating unmanaged memory, copying unmanaged memory blocks, and converting managed to unmanaged types, as well as other miscellaneous methods used when interacting with unmanaged code.
提供一个方法集合,分配非托管内存,拷贝非托管内存块,转换托管和非托管类型,以及一些和非托管代码交互的杂类方法;

这是Marshal类的基本功能;.net一共包含四个Marshal类,每个都有一些方法;

下面来看一个Marshal类基本程序;程序运行结果如下;

代码如下;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;namespace marshalDemo1
{public struct Point{public Int32 x, y;}public partial class Form1 : Form{[DllImport("Kernel32", ExactSpelling = true, SetLastError = true)]static extern Boolean CloseHandle(IntPtr h);public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){textBox1.Text = Marshal.SystemDefaultCharSize.ToString();textBox2.Text = Marshal.SystemMaxDBCSCharSize.ToString();textBox3.Text = Marshal.SizeOf(typeof(Point)).ToString();Point p = new Point(); textBox4.Text = Marshal.SizeOf(p).ToString();IntPtr hglobal = Marshal.AllocHGlobal(100);textBox5.Text = hglobal.ToString();Marshal.FreeHGlobal(hglobal);Boolean f = CloseHandle(new IntPtr(-1));if (!f){Console.WriteLine("CloseHandle call failed with an error code of: {0}",Marshal.GetLastWin32Error());}}}
}

C# Marshal类基本概念和入门示例程序相关推荐

  1. BizTalk 2006 简单入门示例程序(附源项目文件下载)

    BizTalk 2006 简单入门示例程序(附源项目文件下载) 为初学BizTalk Server 2006的开发人员,提供一个简单入门的示例程序,包括一个Receive Port.Send Port ...

  2. Scrapy入门示例程序

    1.安装Scrapy 参考文档 官方指导文档,Scrapy 2.5 documentation - Scrapy 2.5.1 documentation scrapy的中文指导文档,Scrapy 1. ...

  3. JDBC概念快速入门工具类Util的写法

    JDBC概念&快速入门&工具类Util的写法 概念 Java Database Connectivity Java 数据库连接,用Java语言操作数据库 JDBC本质:官方定义的一套操 ...

  4. python爬虫入门实例-终于领会python爬虫入门示例

    随着人工智能 大数据的火热 Python成为了广大科学家和普通大众的学习语言.在学习Python的过程中 有很多人感到迷茫 不知道自己该从什么地方入手,今天我们就来说一些新手该如何学习Python编程 ...

  5. ADO.NET Entity Framework 入门示例向导(附Demo程序下载)

    ADO.NET Entity Framework 入门示例向导(附Demo程序下载) ADO.NET Entity Framework 是.Net Framework 3.5 SP1 引入的实体框架, ...

  6. jersey 入门示例_Jersey Web Service Hello World Java示例

    jersey 入门示例 在Restlet之后, Jersey是另一个流行的开源框架,可以用Java创建RESTful Web服务 . Jersey符合JAX-RS规范,实际上它是JAX-RS(JSR ...

  7. Java日志框架 -- 日志框架介绍、日志门面技术、JUL日志(JUL架构、JUL入门示例、JUL日志级别、JUL日志的配置文件)

    1. 日志的概念 日志文件是用于记录系统操作事件的文件集合,可分为事件日志和消息日志.具有处理历史数据.诊断问题的追踪以及理解系统的活动等重要作用. 2. Java日志框架 问题: 控制日志输出的内容 ...

  8. ADO.NET Entity Framework 入门示例

    ADO.NET Entity Framework 是.Net Framework 3.5 SP1 引入的实体框架,它使开发人员可以通过对象模型(而不是逻辑/关系数据模型)专注于数据.实体框架Entit ...

  9. [WCF编程]1.WCF入门示例

    一.WCF是什么? Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,整合了原有的windows通讯的 .net Remotin ...

最新文章

  1. 变分自编码器VAE代码
  2. mysql 5.0 php_PHP 5.0的新特性
  3. 简单入门——深度学习笔记(Part II)
  4. 如何在网页中动态为模版页的Body添加属性
  5. sklearn自学指南(part3)--使用手册的目录
  6. Redis(案例五:Set数据)
  7. flink运行原理_Flink运行架构剖析
  8. python背景怎么自定义铃声_Python 上课铃声的定时播放(具有较强的自我管理能力.jpg)...
  9. 印度不只有开挂火车,还有一开挂的数学家,凭一己之力单刷数学界
  10. UI2Code智能生成Flutter代码——版面分析篇
  11. 用C#生成不重复的随机数
  12. Oracle 19c 新特性:ADG的自动DML重定向增强读写分离
  13. 华为 FusionData 发布,大数据痛点消失不见!
  14. 如何使用Java将字符串保存到文本文件?
  15. 软件项目开发文档模板
  16. 打垮你的永远不是压力,而是选择的能力!
  17. 美国语言教学5c标准,美国外语教学(一)——5C目标
  18. 通过js脚本处理剪切板(简单而强大的效率工具)
  19. python爬虫设计图片大全_PYTHON爬虫——必应图片关键词爬取
  20. Spatiotemporal Multi-Graph Convolution Network for Ride-Hailing Demand Forecasting

热门文章

  1. shiro.ini实现授权
  2. IMXRT10xx MDK 编译器AC5 升级AC6
  3. [YTU]_2489( C++结构体之统计最高最低分)
  4. Simulink仿真 第四节 总线及示波器模块
  5. minEnclosingCircle函数
  6. os.urandom(n)函数解释Python
  7. 路由器中虚拟服务器设置,路由器中虚拟服务器设置方法
  8. 电力系统单机无穷大_电力系统分析(九):电力系统的稳定性分析
  9. 常见的原生javascript DOM操作
  10. 实验八 《Coderxiaoban团队》团队作业4:基于原型的团队项目需求调研与分析