如何在VB.Net中创建COM(PDF)对象的多维哈希表

如何在VB.Net中创建COM(PDF)对象的多维哈希表,vb.net,pdf,Vb.net,Pdf,我目前有一个功能代码,用于创建和修改哈希表中包含的Nuance PDF对象,其中哈希键是字符串值的输出流。不幸的是,当每个PDF文件超过10 MB左右时,将其他PDF文件合并到其中会使程序变得缓慢 我想使用一个额外的整数索引向哈希表添加一个维度,这样每当合并文档的数量超过配置文件中的值时,我就可以简单地打开一个新的PDF 当我初始化嵌套哈希表时,一开始看起来一切正常。我可以将Nuance PDF对象分配给它。但是,当我尝试访问其中一个PDF元素时,TryCast失败,不返回任何内容 下面是我如何

我目前有一个功能代码,用于创建和修改哈希表中包含的Nuance PDF对象,其中哈希键是字符串值的输出流。不幸的是,当每个PDF文件超过10 MB左右时,将其他PDF文件合并到其中会使程序变得缓慢

我想使用一个额外的整数索引向哈希表添加一个维度,这样每当合并文档的数量超过配置文件中的值时,我就可以简单地打开一个新的PDF

当我初始化嵌套哈希表时,一开始看起来一切正常。我可以将Nuance PDF对象分配给它。但是,当我尝试访问其中一个PDF元素时,TryCast失败,不返回任何内容

下面是我如何设置OutStream1的第一个实例OutStream1只是一个用于简化的硬编码示例-实际输出流是从配置文件读取的

我的目标是在达到阈值时,根据需要继续向内部哈希表添加新的PDF对象

Dim pdfOutput As Hashtable = New Hashtable
Dim outTemp As Hashtable = New Hashtable
outTemp(0) = CreateObject("NuancePDF.DDDoc")
pdfOutput("OutStream1") = outTemp(0)
准备好操作PDF对象时,对pdMrgDoc的分配失败。如果不使用TryCast,错误消息为:

无法将“System.\u ComObject”类型的COM对象强制转换为类类型“System.Collections.Hashtable”。表示COM组件的类型实例不能转换为不表示COM组件的类型;但是,只要底层COM组件支持对接口IID的QueryInterface调用,就可以将它们转换为接口


我不确定那个错误消息是什么意思。有什么方法可以做到这一点吗?

我建议使用类型化容器,而不是传统的非类型化哈希表

我还没有测试过这个,但它应该按照您的预期工作:

Dim pdfOutput As New Dictionary(Of String, Dictionary(Of Integer, Object))
Dim entry as New Dictionary(Of Integer, Object)

entry.Add(0, CreateObject("NuancePDF.DDDoc"))
pdfOutput.Add("OutStream1", entry)
然后,编译器将捕获由于编译时类型错误导致的基本错误,而不是等到运行时强制转换失败后才执行


您可能还想考虑将行为封装在类中,而不是存储字典并管理外部行为。这将使代码更干净、更易于维护。

非常好,谢谢!我有点不好意思承认我以前试过用字典,但语法错了。非常感谢。。。
Dim pdfOutput As New Dictionary(Of String, Dictionary(Of Integer, Object))
Dim entry as New Dictionary(Of Integer, Object)

entry.Add(0, CreateObject("NuancePDF.DDDoc"))
pdfOutput.Add("OutStream1", entry)