一、关于 IDL 中 retval 的使用: retval 适用: 注释: 示例: 其中 StringOutX 在用户导向的浏览器中将明确被标识为返回值。 二、VARIANT 可变元类型的使用 而后 VARIANT::vt 被指定了特定类型如 VT_BSTR,并在相应的联合类型中设置值: VARIANT var; 2)动态类型识别 3)通过类型库可在运行时获得与语言无关的接口参数类型描述信息。 4)类型转换 cmpnt.Title = 100; 自动化控制器可能将其解释为 long 类型,而传递指定 vt 为 VT_I4 的 VARIANT 类型。 为此,调度接口实现应当完成有关的类型转换,以增强该接口的易用性,有关的转换可能是实现各不相同的,为此,自动化提供了通用的 VariantChangeType 可变元类型转换函数。 HRESULT VariantChangeType( wFlags 可指定附加规则: VARIANT_ALPHABOOL VARIANT_NOUSEROVERRIDE VARIANT_LOCALBOOL 示例: 5)可选参数 三、BSTR 数据类型 BSTR 存储宽字符数组,但并不按照 C 字符串的格式存储,它具有以下特征: BSTR SysAllocString( VOID SysFreeString( 四、SAFEARRAY 类型 typedef struct tagSAFEARRAY { typedef struct tagSAFEARRAYBOUND { SAFEARRAY::fFeatures 指出了该数组的元素类型及特征。可影响其释放存储的行为: FADF 可理解为:Features or Attributes Describe Flags FADF_AUTO 0x0001 An array that is allocated on the stack. 在堆栈中执行的分配 FADF_STATIC 0x0002 An array that is statically allocated. 静态分配 FADF_EMBEDDED 0x0004 An array that is embedded in a structure. 嵌入在结构中 FADF_FIXEDSIZE 0x0010 An array that may not be resized or reallocated. 不可重分配 FADF_RECORD 0x0020 An array containing records. When set there will be a pointer to the IRecordinfo interface at negative offset 4 in the array descriptor. 具有指向 IRecodeinfo 的指针,存储于数组描述符之前的 4 个字节 FADF_HAVEIID 0x0040 An array that has an IID identifying interface. When set there will be a guid at negative offset 16 in the safearray descriptor. Flag is set only when FADF_DISPATCH or FADF_UNKNOWN is also set. 存储接口指针,则数组描述符之前 16 个字节将被用于存储 GUID。必须同时包含 FADF_DISPATCH 或 FADF_UNKNOWN FADF_HAVEVARTYPE 0x0080 An array that has a VT type. When set there will be a VT tag at negative offset 4 in the array descriptor that specifies the element type. 存储可变元类型,数组描述符之前 4 个字节将被用于存储 VT_type 以指出元素类型 FADF_BSTR 0x0100 An array of BSTRs. FADF_UNKNOWN 0x0200 An array of IUnknown*. FADF_DISPATCH 0x0400 An array of IDispatch*. FADF_VARIANT 0x0800 An array of VARIANTs. FADF_RESERVED 0xF0E8 Bits reserved for future use. OLE 自动化中包含一组以 SafeArray 开头的操作 SAFEARRAY 结构的函数: SafeArrayAccessData 五、类型库 类型库提供了一种语言无关的类型信息登记。将提供有关组件、接口、方法、属性、参数以及结构的类型信息。 类型库是什么: 1)类型库的建立 自动化库函数 CreateTypeLib 帮助创建类型库,并返回支持信息写入的 ICreateTypeLib 接口。 更为常用的,使用 IDL 接口描述语言来编译类型库。 2)IDL 语言中的 library 关键字 library 声明包含了 MIDL 用于创建类型库的所有信息。 [ 类型库可指定不同的 lcid 标识以对应不同本地化实现。在加载类型库时可以指定所请求的 lcid 标识。 位于 library 类型库声明块的声明可以使用在 library 块内部或者外部声明的元素。library 声明可以使用的元素包含:基本类型,从其他元素派生,或者仅仅引用外部声明,如: interface MyFace [ 3)lcid 本地化标识 +-----------------------+-------------------------+ +-------------+---------+-------------------------+ 上面列出了 LANGID 以及 LCID 的位编制。为 IDL 指定的本地化标识可通过 MSDN Library 中任意提供本地化语言列表的页面中查询。 4)importlib 已编译类型库导入 library BrowseHelper 5)coclass 该声明描述了组件的 GUID 以及支持的接口。并同时帮助定义有关组件的 CLSID。最主要的是,它限定了引用/声明的接口在 library 中的分组 |
自动化的可变元参数及类型库
最新推荐文章于 2019-06-29 19:09:36 发布