理解Pointer_default:COM指针属性详解
"本文主要解析了Pointer_default属性在COM组件中的应用,重点介绍了ref、unique和pointer这三种类型的指针属性及其在跨进程或跨机器通信中的作用。了解这些属性有助于深入理解IDL(Interface Definition Language)或ODL(Object Definition Language)文件的编写和COM组件的交互机制。" 在COM(Component Object Model)编程中,Pointer_default属性是用来定义指针在跨进程或跨机器通信时的行为。当客户端和组件不在同一地址空间时,指针不仅需要传递其值,还需要传递其指向的内容。为了优化传输效率,COM将指针分为三个类别: 1. **ref**:这个类型的指针总是指向一个有效的内存区域,不允许为NULL。在调用前后,指针始终指向同一个地址,组件服务器端返回的数据会写入该内存区域。ref指针所指向的内存不能同时被其他指针或变量引用,以确保数据的一致性。 2. **unique**:unique指针可以是NULL,并且可以在调用前后由NULL变为非NULL(系统自动分配内存),或者由非NULL变为NULL(客户端需释放内存)。调用过程中,unique指针的值可以改变。如果非空,组件返回的数据会写入已存在的内存,但同样,unique指针所指向的内存不能被其他指针或变量共享。 3. **pointer**:pointer与unique相似,但它允许指针指向的内存被其他指针或变量引用。这意味着多个指针可能指向同一块内存,这样可以实现数据的共享,但也会带来同步和管理的复杂性。 对于指针的默认行为,如果没有显式设置ref、unique或pointer属性,COM会有以下规则: - 方法参数中的一级指针默认为ref类型,意味着它们总是指向已分配的内存。 - 结构体内的指针或指向指针的指针则遵循pointer_default的全局设定。 通过在IDL或ODL文件中明确指定指针的类型,开发者可以控制指针在marshalling(序列化)过程中的行为,从而优化跨进程通信的性能和数据一致性。理解并正确使用Pointer_default属性对于编写高效、可靠的COM组件至关重要。
![](https://csdnimg.cn/release/download_crawler_static/2920781/bg1.jpg)
![.zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)