2004/12/22 | 用VC++开发OPC时遇到的变态类型-VARIANT!很讨厌也很可爱的~~~
类别(VC++天地) | 评论(0) | 阅读(738) | 发表于 10:28
OPC中数据项的数据类型为 VARIANT,VARIANT结构本身有具体的数据类型。VT_I2, I4, R4, R8, CY, DATE, BSTR, BOOL, UI1类型,以及这些类型组成的数组类型(VT_ARRAY),是OPC基金会希望开发者使用的(部分原因是这些类型在VB里是合法的)。但除此之外其它数据类型(VT_*)也是允许的。

一般情况下,服务器应该尽量满足针对这些类型的客户请求。(OPC DA规范允许客户程序针对数据项指定返回值类型,服务器有责任尽量为其转换)。用户也可以请求上述建议之外的类型。

一些开发商(尤其是客户程序、服务器来自于同一开发商时),往往使用以上类型之外的类型,来传递他们的专用数据,从互操作角度来讲,这种情况应尽量避免。

建议(不是必须)客户程序在处理AddItems或者ValidateItems的返回数据时,考虑处理 VT_EMPTY 类型的 native type,因为有些服务器无法在数据项刚被添加时获取其实际数据类型。

对于不能转换的请求类型,服务器应尽量合理地处理,比如先调用VariantChangeType,失败的话返回错误代码。

客户程序应该做好服务器无法接受请求类型的准备。

当客户请求数据项的原始类型时(发送VT_EMPTY),应做好服务器返回任何类型的准备。即使无法处理,也应该合理处理,释放掉内存(VariantClear)并提示用户。
0

评论Comments