通讯协议046——全网独有的OPC HDA知识一之接口(一)

本文简单介绍OPC HDA规范的接口的一般信息,以及有关OPC设计者期望如何实现和使用这些接口的一些背景信息。,更多通信资源请登录网信智汇(wangxinzhihui.com)。

1、内存所有权

根据COM规范,客户端必须释放与“out”或“in/out”参数关联的所有内存。这包括由任何结构内的元件指向的存储器。这一点对于客户端编写人员来说非常重要,否则他们将遇到难以找到的内存泄漏。请参阅IDL文件以确定哪些参数是out参数。推荐的方法是客户端创建一个子例程,用于正确释放每种类型的结构。

    与成功/失败无关,服务器必须始终为“out”参数返回定义良好的值。释放分配的资源是客户的责任。

注:如果错误结果是任何FAILED错误,如E_OUTOFMEMORY,则OPC HDA服务器应为所有“out”指针返回NULL(这是标准COM行为)。此规则也适用于以下许多函数返回的错误数组(ppErrors)。通常,一个健壮的OPC客户端应该在释放每个“out”或“In/out”指针之前检查其是否为NULL。

2、标准接口

根据COM规范,所有方法都必须在每个必需的接口上实现。

根据COM规范,支持的任何可选接口都必须实现该接口中的所有函数,即使该实现只是返回E_NOTIMPL的存根实现。

3、 Null Strings and Null Pointers

以下使用这两个术语。它们不是一回事。NULL指针是一个无效的指针(0),如果使用它将导致异常。NULL字符串是指向1个字符数组的有效(非零)指针,其中该字符为NULL(即0)。如果NULL字符串作为[out]参数(或结构的元素)从方法返回,则必须释放该字符串,否则包含NULL的内存将丢失。还要注意,由于COM封送限制,不能为[in,string]参数传递NULL指针。在这种情况下,应传递指向NULL字符串的指针,以指示省略的参数。

4、返回数组

您将注意到IDL中的语法size_is(,dwCount)与指向指针的指针结合使用。这表示返回的项是指向指示类型的实际数组的指针,而不是指向指示类型项的指针数组的指针。这简化了服务器和客户端对数据的封送、创建和访问。

5、异步/同步接口

客户端从服务器获取数据有两种方式。

1)它可以执行同步读取(简单且相当高效)。这可能适用于读取相对少量数据且不考虑最大效率的相当简单的客户端。以这种方式操作的客户端愿意阻止并等待结果。当请求大量数据时,这可能需要一些时间。这种方法适用于报告或其他非交互式阅读,但对于交互式显示来说非常糟糕。

2)它可以使用异步方法“订阅”数据,异步方法更复杂,但非常高效。这是交互式客户端的推荐行为,因为这将最大限度地减少显示锁定。客户端可以在等待数据返回的同时自由处理其他交互。

6、错误及返回码

OPC规范描述了OPC HDA服务器实现的接口和相应行为,以及OPC客户端应用程序所依赖的接口和行为。OPC特定错误和返回代码的列表包含在本规范的OPC错误代码摘要部分。对于下面描述的每种方法,都包括所有可能的OPC错误代码以及最常见的OLE错误代码的列表。在实践中,客户端可能会遇到额外的错误代码,如RPC和安全相关代码,他们应该做好处理这些代码的准备。

在某些情况下,还允许服务器返回供应商特定的错误代码。这样的代码可以传递给GetErrorString方法。稍后将对此进行更详细的讨论。

在所有情况下,“E”错误代码将指示FAILED类型错误,“S”错误代码至少指示部分成功,最低限度地指示ppErrors数组中有更多信息可用。服务器在返回“S”错误代码时可能返回数据,也可能不返回数据,但如果调用中提供了指向ppErrors数组的指针,则它必须始终返回ppErrors阵列。如果返回给客户端的任何ppErrors代码不是S_OK,则服务器必须返回S_FALSE,以指示客户端应检查ppErrors数组以获取详细信息。

对于所有接口的所有方法,如果从调用返回FAILED代码,则客户端应该认为所有输出值都无效,而服务器应该为所有“out”参数返回NULL指针。这是标准的COM行为。对于异步接口,如果调用返回了FAILED代码,或者返回了S_FALSE,并且单个项的ppErrors代码都是FAILED代码时,将不会进行回调。

通常,客户端在释放每个“out”或“In/out”指针之前,应始终检查其是否为NULL值。

7、IUnknown

服务器必须提供标准的IUnknown接口。由于这是一个定义良好的接口,因此不进行详细讨论。有关更多信息,请参阅OLE程序员参考资料。必须提供此接口,并按照Microsoft的要求实现所有功能。

未完待续。更多通信资源请登录网信智汇(wangxinzhihui.com)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值