列集 百科内容来自于: 百度百科

COM中的列集

在微软的COM(组件对象模型)中,列集是将参数打包与解包,使得远程过程(remote procedure)可以进行的过程。当接口指针要跨越COM单元(apartment)边界(也就是在COM库的实例之间跨越)时,必须要对其进行列集操作。
不同的参数以不同的方式进行列集。例如列集一个整形参数只需要简单地将这个值复制到消息缓存中(即便是这么一个简单的例子,也可能存在着跨计算机时需要处理的字节顺序)。列集一个数组是一个更复杂的过程。数组成员被以特定的顺序复制,从而使另一端可以精确地重构数组。
对于标准的列集方法(standard marshaling),代理对象(proxy)和存根代码(stub)对于接口来说都是系统宽度(systemwide)的资源,并且它们使用遵循标准协议的通告进行交互与通信。
除了标准列集法还有另一个选择,那就是自定义的列集方法(custom marshaling)。对于任何一个给定的接口,对象可以选择COM提供的标准列集法或者是自定义列集法。一旦为给定的接口做出选择,这种选择将在一个对象的生命周期里一直保持不变。
组件之间的通信

组件之间的通信

列集用于组件的通信中。如右图所示,在进程边界的客户端一侧,客户端的方法调用到达代理然后进入属于COM库的一部分的通道(channel)。通道将包含有列集过的参数的缓存发送到RPC运行时库,RPC运行时库随后会将这些信息传递到进程边界的另一侧。

.Net中的列集

在.Net Framework中,当P/Invoke进行不受托管的类型(unmanaged type)与CLR类型之间的转换时,同样需要列集。
.Net Framework中,MarshalByRefObject类表示必须通过引用进行列集(marshale)的对象;在.Net的世界里,Windows控件都是MarshalByRefObject对象,因为它们只在创建它们的进程中有效,必须通过引用才能在这个进程之外使用。

Python中的列集

Python标准库中,列集(Marshal)一词被认为与序列化同义。
Python中的列集模块包含可以用于以一种二进制格式读写Python变量的函数。这种格式特别用于Python,但独立于机器的架构(比如,你可以将某个Python变量写到PC上的一个文件中,将这个文件传输到Sun平台上,在那儿重新读取它)。

XPCOM中的列集

列集同样被广泛应用于那些利用Mozilla Application Framework所提供的XPCOM技术的应用程序和脚本中。
$firstVoiceSent
- 来自原声例句
小调查
请问您想要如何调整此模块?

感谢您的反馈,我们会尽快进行适当修改!
进来说说原因吧 确定
小调查
请问您想要如何调整此模块?

感谢您的反馈,我们会尽快进行适当修改!
进来说说原因吧 确定