MarshalAs

引用自:https://www.xuebuyuan.com/1033846.html

 MarshalAs是提供向非托管代码封送数据时的规则。比如String或StringBuilder型,传递给非托管代码的时候可能是LPStr LPWStr BStr等等。你通过MarshalAs特性告诉.NET应该封送成什么类型。

Marshal就是把一个结构(类)序列化成一段内存,然后送到另一个进程(.net中Application domain)中供另一个进程中的函数使用。  
  比如你的一个结构struct{  
  Pen pen;  
  }s; s是一个指向已有的Pen对象的引用,当你把s传给本进程中的一个函数f时,f可以很容易地找到pen的实际对象,但如果你把s传到另外一个进程时,甚至是另外一台机器上的进程时,这个进程就没办法找到pen的实际内容。Marshal技术则可以把pen对象中的所有实际内容按规则放到一个缓冲中,(所有的引用或指针都要转换成实际对象)然后把缓冲中的内容送到另一个进程,函数调用完成再用同样方式把结果返回来。  

 

----------------------------------------------------------------------------------

    项目需求在两个进程中间传递一个结构体串,结构体成员类型不固定,长度不固定,所以就使用二进制,加上帧头尾,相当传递一个一个结构体过去,另一个进程接受到数据,转换回结构体。所以需要得到完整内容的结构体。c#的引用类型,无法传递其内容,所以使用marshal类,其原理见虚线上内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 1. 介绍 1 1.1 Hello, world 1 1.2 类型 2 1.2.1 预定义类型 3 1.2.2 转换 5 1.2.3 数组类型 6 1.2.4 类型系统一致 7 1.3 变量和参数 8 1.4 自动内存管理 11 1.5 表达式 13 1.6 声明 14 1.7 类 17 1.7.1 常数 19 1.7.2 域 19 1.7.3 方法 20 1.7.4 属性 21 1.7.5 事件 22 1.7.6 操作符 23 1.7.7 索引 24 1.7.8 实例构造函数 25 1.7.9 析构函数 26 1.7.10 静态构造函数 26 1.7.11 继承 27 1.8 结构 28 1.9 接口 29 1.10 代表 30 1.11 联合 31 1.12 名称空间和集合 31 1.13 版本 33 1.14 特征 35 2. 语法结构 37 2.1 翻译的阶段 37 2.2 文法符号 37 2.3 预处理 38 2.3.1 预处理声明 38 2.3.2 #if, #elif, #else, #endif 39 2.3.3 预处理控制行 40 2.3.4 #line 41 2.3.5 预处理标识符 41 2.3.6 预处理表达式 41 2.3.7 与空白交互作用 42 2.4 语法分析 43 2.4.1 输入 43 2.4.2 输入字符 43 2.4.3 行结束符 43 2.4.4 注释 43 2.4.5 空白 44 2.4.6 标记 45 2.5 句法分析 45 2.5.1 标识符 45 2.5.2 关键字 46 2.5.3 数据符号 46 2.5.4 操作符和标点 51 2.5.5 Unicode 字符转意字符序列 51 3. 基本概念 53 3.1 声明 53 3.2 成员 55 3.2.1 名称空间成员 55 3.2.2 结构成员 55 3.2.3 枚举成员 55 3.2.4 类成员 56 3.2.5 接口成员 56 3.2.6 数组成员 56 3.2.7 代表成员 56 3.3 成员访问 56 3.3.1 声明可访问性 56 3.3.2 可访问性域 57 3.3.3 保护的访问 59 3.3.4 可访问性约束 60 3.4 签名和重载 60 3.5 范围 61 3.5.1 名称隐藏 63 3.6 名称空间或类型名称 65 3.6.1 合格的名称 66 4. 类型 67 4.1 数值类型 67 4.1.1 默认构造函数 68 4.1.2 结构类型 69 4.1.3 简单类型 69 4.1.4 整数类型 70 4.1.5 浮点类型 71 4.1.6 十进制类型 72 4.1.7 布尔类型 72 4.1.8 枚举类型 72 4.2 引用类型 72 4.2.1 类类型 73 4.2.2 对象类型 73 4.2.3 字符串类型 73 4.2.4 接口类型 74 4.2.5 数组类型 74 4.2.6 代表类型 74 4.3 包装和解包 74 4.3.1 包装转换 74 4.3.2 解包转换 75 5. 变量 77 5.1 变量类型 77 5.1.1 静态变量 77 5.1.2 实例变量 77 5.1.3 数组元素 78 5.1.4 数值参数 78 5.1.5 引用参数 78 5.1.6 输出参数 78 5.1.7 局部变量 79 5.2 默认值 79 5.3 明确赋值 79 5.3.1 初始赋值变量 81 5.3.2 非初始赋值变量 82 5.4 变量引用 82 6. 转换 83 6.1 隐式转换 83 6.1.1 同一性转换 83 6.1.2 隐式数值转换 83 6.1.3 隐式枚举转换 84 6.1.4 隐式引用转换 84 6.1.5 转换 84 6.1.6 隐式常数表达式转换 84 6.1.7 用户自定义隐式转换 85 6.2 显式转换 85 6.2.1 显式数值转换 85 6.2.2 显式枚举类型转换 86 6.2.3 显式引用类型转换 86 6.2.4 解包转换 87 6.2.5 用户自定义显式转换 87 6.3 标准转换 87 6.3.1 标准隐式转换 87 6.3.2 标准显式转换 88 6.4 用户定义转换 88 6.4.1 允许的用户自定义转换 88 6.4.2 用户自定义转换的取值 88 6.4.3 用户自定义隐式转换 89 6.4.4 用户自定义显式类型转换 89 7. 表达式 91 7.1 表达式分类 91 7.1.1 表达式的数值 92 7.2 操作符 92 7.2.1 操作符优先级和结合顺序 92 7.2.2 操作符重载 93 7.2.3 一元操作符重载分析 94 7.2.4 二元操作符重载分析 94 7.2.5 候选用户定义操作符 95 7.2.6 数字升级 95 7.3 成员查询 9

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值