C# Marshal类基本概念和入门示例程序
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类基本概念和入门示例程序相关推荐
- BizTalk 2006 简单入门示例程序(附源项目文件下载)
BizTalk 2006 简单入门示例程序(附源项目文件下载) 为初学BizTalk Server 2006的开发人员,提供一个简单入门的示例程序,包括一个Receive Port.Send Port ...
- Scrapy入门示例程序
1.安装Scrapy 参考文档 官方指导文档,Scrapy 2.5 documentation - Scrapy 2.5.1 documentation scrapy的中文指导文档,Scrapy 1. ...
- JDBC概念快速入门工具类Util的写法
JDBC概念&快速入门&工具类Util的写法 概念 Java Database Connectivity Java 数据库连接,用Java语言操作数据库 JDBC本质:官方定义的一套操 ...
- python爬虫入门实例-终于领会python爬虫入门示例
随着人工智能 大数据的火热 Python成为了广大科学家和普通大众的学习语言.在学习Python的过程中 有很多人感到迷茫 不知道自己该从什么地方入手,今天我们就来说一些新手该如何学习Python编程 ...
- ADO.NET Entity Framework 入门示例向导(附Demo程序下载)
ADO.NET Entity Framework 入门示例向导(附Demo程序下载) ADO.NET Entity Framework 是.Net Framework 3.5 SP1 引入的实体框架, ...
- jersey 入门示例_Jersey Web Service Hello World Java示例
jersey 入门示例 在Restlet之后, Jersey是另一个流行的开源框架,可以用Java创建RESTful Web服务 . Jersey符合JAX-RS规范,实际上它是JAX-RS(JSR ...
- Java日志框架 -- 日志框架介绍、日志门面技术、JUL日志(JUL架构、JUL入门示例、JUL日志级别、JUL日志的配置文件)
1. 日志的概念 日志文件是用于记录系统操作事件的文件集合,可分为事件日志和消息日志.具有处理历史数据.诊断问题的追踪以及理解系统的活动等重要作用. 2. Java日志框架 问题: 控制日志输出的内容 ...
- ADO.NET Entity Framework 入门示例
ADO.NET Entity Framework 是.Net Framework 3.5 SP1 引入的实体框架,它使开发人员可以通过对象模型(而不是逻辑/关系数据模型)专注于数据.实体框架Entit ...
- [WCF编程]1.WCF入门示例
一.WCF是什么? Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,整合了原有的windows通讯的 .net Remotin ...
最新文章
- 变分自编码器VAE代码
- mysql 5.0 php_PHP 5.0的新特性
- 简单入门——深度学习笔记(Part II)
- 如何在网页中动态为模版页的Body添加属性
- sklearn自学指南(part3)--使用手册的目录
- Redis(案例五:Set数据)
- flink运行原理_Flink运行架构剖析
- python背景怎么自定义铃声_Python 上课铃声的定时播放(具有较强的自我管理能力.jpg)...
- 印度不只有开挂火车,还有一开挂的数学家,凭一己之力单刷数学界
- UI2Code智能生成Flutter代码——版面分析篇
- 用C#生成不重复的随机数
- Oracle 19c 新特性:ADG的自动DML重定向增强读写分离
- 华为 FusionData 发布,大数据痛点消失不见!
- 如何使用Java将字符串保存到文本文件?
- 软件项目开发文档模板
- 打垮你的永远不是压力,而是选择的能力!
- 美国语言教学5c标准,美国外语教学(一)——5C目标
- 通过js脚本处理剪切板(简单而强大的效率工具)
- python爬虫设计图片大全_PYTHON爬虫——必应图片关键词爬取
- Spatiotemporal Multi-Graph Convolution Network for Ride-Hailing Demand Forecasting
热门文章
- shiro.ini实现授权
- IMXRT10xx MDK 编译器AC5 升级AC6
- [YTU]_2489( C++结构体之统计最高最低分)
- Simulink仿真 第四节 总线及示波器模块
- minEnclosingCircle函数
- os.urandom(n)函数解释Python
- 路由器中虚拟服务器设置,路由器中虚拟服务器设置方法
- 电力系统单机无穷大_电力系统分析(九):电力系统的稳定性分析
- 常见的原生javascript DOM操作
- 实验八 《Coderxiaoban团队》团队作业4:基于原型的团队项目需求调研与分析