《Inside C#》笔记(十五) 非托管代码 下
二编写不安全代码
a)fixed关键字
代码中体现了fixed的用法:fixed (type* ptr= expression) { …};type是类似int*这样的非托管类型或void类型,expression是可以返回为type*指针的任意表达式,被fixed的变量只能在{…}中使用。
上面的代码运行后,foo.x=42。就只能看懂这一点了。
三 COM互操作
COM组件与.NET运行时的交互是通过COM Interop进行的。这儿涉及到很多COM组件的知识,以前只是在操作Word时用过Microsoft.Office.Interop.Word,这里只打算大概了解一下。
a)实例的COM组件为AirlineInfo COM,公开方法为:
.NET只能使用包含元数据(metadata)的组件,而COM内部不是这样的,大概是包含一些注册和类似接口的实现。所以,在操作COM之前,为其生成对应的元数据。这项工作由元数据层进行,它负责处理与数据类型相关的信息,然后运行时基于这些类型信息生成RCW(Runtime Callable Wrapper 运行时可调用包装)。RCW负责COM对象的激活、Marshal、生命周期管理等事项。
b)使用tlbimp.exe可以根据后缀为.tlb的COM文件生成.dll文件,然后就可以像使用普通的类一样使用dll中的类和元数据了。
c)使用b中提的方法(早绑定)会进行强类型检查、自动完成等特性,但有时无法在编译时就知道COM对象的元数据,这时就需要使用晚绑定的方法了。
只要知道COM组件中某个方法名称,就可以使用Type.GetTypeFromProgID反射调用方法了。
学习资料:Inside C# by Tom Archer
《Inside C#》笔记(十五) 非托管代码 下的更多相关文章
- 《Inside C#》笔记(十五) 非托管代码 上
为了保证向后兼容性,C#和.NET可以通过非托管的方式运行旧代码.非托管代码是指没有被.NET运行时管控的代码.非托管代码主要包括:平台调用服务(PlatformInvocation Services ...
- python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...
- (C/C++学习笔记) 十五. 构造数据类型
十五. 构造数据类型 ● 构造数据类型概念 Structured data types 构造数据类型 结构体(structure), 联合体/共用体 (union), 枚举类型(enumeration ...
- How tomcat works 读书笔记十五 Digester库 下
在这一节里我们说说ContextConfig这个类. 这个类在很早的时候我们就已经使用了(之前那个叫SimpleContextConfig),但是在之前它干的事情都很简单,就是吧context里的co ...
- (转载)西门子PLC学习笔记十五-(数据块及数据访问方式)
一.数据块 数据块是在S7 CPU的存储器中定义的,用户可以定义多了数据块,但是CPU对数据块数量及数据总量是有限制的. 数据块与临时数据不同,当逻辑块执行结束或数据块关闭,数据块中的数据是会保留住的 ...
- MySQL学习笔记十五:优化(2)
一.数据库性能评测关键指标 1.IOPS:每秒处理的IO请求次数,这跟磁盘硬件相关,DBA不能左右,但推荐使用SSD. 2.QPS:每秒查询次数,可以使用show status或mysqladmin ...
- 【慕课网实战】Spark Streaming实时流处理项目实战笔记十五之铭文升级版
铭文一级:[木有笔记] 铭文二级: 第12章 Spark Streaming项目实战 行为日志分析: 1.访问量的统计 2.网站黏性 3.推荐 Python实时产生数据 访问URL->IP信息- ...
- angular学习笔记(十五)-module里的'服务'
本篇介绍angular中的模块:module 在笔记(二)http://www.cnblogs.com/liulangmao/p/3711047.html里已经讲到过模块,这篇主要讲模块的 '服务' ...
- python3笔记十五:python函数
一:学习内容 函数概述 函数的参数与返回值 参数值传递和引用传递 关键字参数 默认参数 不定长参数 二:函数概述 1.本质:函数就是对功能的封装 2.优点: 简化代码结构,增加了代码的复用度(重复使用 ...
随机推荐
- Shell-2--输入输出重定向
自己写一下吧,免得又忘了,被人问到,被鄙视 0 表示标准输入, 1 表示标准输出 , 2 表示标准错误输出 一个 > 表示已覆盖的方式把命令的正确执行重定向到文件 两个 >> 表示是 ...
- ubuntu18.04 出现 Command 'ifconfig' not found 问题的解决办法
我们在虚拟主机中查看ip地址需要输入ifconfig,但是报以下错误: 系统提示我们安装 net-tools,当我们输入以下命令,即可安装完成. sudo apt-get install net-to ...
- 课程四(Convolutional Neural Networks),第四 周(Special applications: Face recognition & Neural style transfer) —— 2.Programming assignments:Art generation with Neural Style Transfer
Deep Learning & Art: Neural Style Transfer Welcome to the second assignment of this week. In thi ...
- 关于jquery中prev()和next()的用法
用prev()和next()方法动态的添加class.以达到当前元素的前面几个元素或后面的几个元素添加class <body> <ul> <li>1</li& ...
- ubuntu 增加一个用户 并赋予权限
一.添加一个用户 sudo adduser tommy //添加一个tommyd的用户 sudo passwd tommy // 修改密码 回车后出现一下提示 输入密码即可Changing pass ...
- Linux 使用 ssh 命令远程连接另一台 Linux
用 Linux 系统的 ssh 命令远程连接另一台 Linux 机器的命令 #ssh 用户名@主机名(IP地址) 例: #ssh root@10.41.24.138 ...
- 数字证书及CA介绍
数字证书及CA介绍 作者: 编程随想 发布时间: 2013-12-03 11:48 阅读: 95280 次 推荐: 69 原文链接 [收藏] ★ 先说一个通俗的例子 考虑到证书体系的 ...
- [转]angular2封装material2对话框组件
本文转自:https://www.jianshu.com/p/da9978e25566 1. 说明 angular-material2自身文档不详,控件不齐,使用上造成了很大的障碍.这里提供一个方案用 ...
- c# txt代码转换成HTML格式
/// <summary> /// 字符串字符处理 /// </summary> /// <param name="chr">等待处理的字符串& ...
- Laravel 中使用支付宝、银联支付、微信支付进行支付
Laravel Packages 为 Laravel 提供了强大的扩展功能,为从 1 到 n 提供无限可能,这其中就包括支付, Laravel 官方提供的 Cashier 包集成对 Stripe 的支 ...