|
参数)或者 [out, retval](返回值),那么 Visual Basic 不允许使用它。这是 SAX2 接口中某些方法的状况。
此外,我还在 ISAXAttributes 接口上调用大多数方法时遇到了麻烦。例如,GetLocalName 方法在 Visual Basic 中产生了一个子程序。调用者将索引传送给 Attributes 集合。程序返回整型的 by-now-familiar 数组和数组长度参数。IDL 类似于: HRESULT GetLocalName(
[in] int nIndex,
[out] const wchar_t ** ppwchLocalName,
[out] int * pcchLocalName);
我知道 [out] 参数在 Visual Basic 中是不可接受的。因此,我决定将 IDL 中的 [out] 参数更改为 [in, out]。但是我无法确定如何将 const wchar_t ** 数据类型解码。我注意到,Hardcore Visual Basic 一书提供了称为 UPointerToString 的函数,好像很有帮助。但是 UPointerToString 需要指针(在 VB 中是 Long)。因此我决定将数据类型从 const wchar_t ** 改变为 int *。修改后的 IDL 类似于: HRESULT GetLocalName(
[in] int nIndex,
[in, out] int * ppwchLocalName,
[in, out] int * pcchLocalName);
结果该格式在 Visual Basic 中是可接受的。字符串值可以用 UPointerToStringEx(与 UPointerToString 相同,但是用字符计数作为参数)成功解码。
ISAXAttributes 上的方法现在可以作为子程序调用: Call pAttributes.GetValue(0, pwchValue, cchValue)
上面的调用获得索引位置为 0 的属性值,将指针分配给 pwchValue 中的值和 cchValue 中的值长度。然后从下面的代码中返回 VB 字符串(类似于上面的描述)。 sAttValue = String$(cchValue, 0)
CopyMemory ByVal StrPtr(sAttValue), ByVal pwchValue, cchValue * 2
请注意 pwchValue 前面必须加 ByVal。
我复制了 Xmlsax.idl 文件,称之为 XmlsaxVB.idl,然后在将修改后的副本最终编译为 XmlsaxVB.tlb 之前修改了副本。下载中包括的 ActiveX 组件工程将引用这个修改后的类型库。
当然,不能建议修改 IDL 文件为一般规则。但需要建议的是,不要让修改后的类型库离开您开发所用的计算机。如果用“软件包和部署向导”创建安装程序,那么这样的类型库不应该包括在安装软件包中。但是,由于本文中讨论的 MSXML 只是技术预览,因此任何人尝试在生产环境中引入该示例都是没有危险的。
上一页 [1] [2] [Web开发]XML与HTML在语法上的主要区别详解 [系统软件]如何让Expat支持中文XML [VB.NET程序]vb.net 与 XML 的操作 [VB.NET程序]vb.net读写xml(2)--实现datagrid与xml的沟通(原创… [VB.NET程序]vb.net 读写xml方法(1) [VB.NET程序][VB.NET+XML]完成简单程序配置 [VB.NET程序]Visual Basic 6 逆向工程与反逆向工程 (2) [VB.NET程序]Visual Basic 6 逆向工程与反逆向工程 (1) [VB.NET程序]用Visual Basic创建复杂窗体 [VB.NET程序]Visual Basic的类对于面向对象的支持
|