毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 开发语言 >> 正文

PropertyBag.Contents=byte()报错Invalid procedure call or argument

更新时间:2012-8-10:  来源:毕业论文

PropertyBag.Contents=Byte数组

这句代码报: Invalid procedure call or argument
  无效的过程调用或参数

这个数组就是PropertyBag.Contents
用来还原对象的
 
请看摘自MSDN的部件数据的持久保持:  
   
  使用 PropertyBag 对象使对象成为持久保存的  
  为了使 ActiveX 部件成为持久性的,需要创建 PropertyBag 对象的一个实例。这看起来可能有些多余,类不是已经有了自己的 PropertyBag 吗?为什么不能使用那个 PropertyBag 呢?原因很简单,当对象的生命周期结束的时候,它的 PropertyBag 也将消失。它只存在于内存中;为了保证持久保存,需要在某个合适的位置保存该对象的一份副本,以便在将来需要的时候能够再次将其取出。  
   
  PropertyBag 可以被看作一个“大麻袋”,它可以被装满东西,然后藏在某个安全的地方。到底藏在什么地方将完全取决于实现者。下面的窗体代码演示了如何使一个对象持久性地保存在一个文本文件中:  
   
  Private pb As PropertyBag ' 声明一个 PropertyBag 对象。  
  Private LoanObject As Loan ' 声明一个 Loan 对象。  
   
  Private Sub Form_Unload(Cancel As Integer)  
  Dim varTemp as Variant  
   
  ' PropertyBag 对象的实例化。  
  Set pb = New PropertyBag  
  ' 使用 WriteProperty 将对象保存在 PropertyBag 中。  
  pb.WriteProperty "MyLoanObject", LoanObject  
  ' 将 PropertyBag 的内容赋予一个 Variant。  
  varTemp = pb.Contents  
  ' 将其保存到一个文本文件中。  
  Open "C:\Loandata.txt" For Binary As #1  
  Put #1, , varTemp  
  Close #1  
  End Sub  
   
  PropertyBag 对象的 Contents 属性中包含了以字节数组形式保存的 Loan 对象。为了将其保存到一个文本文件,必须首先将其转换成一种文本文件可以理解的数据类型,例如本例中的 Variant。  
   
  利用保存的数据恢复一个对象  
  当对象已经被保存在文本文件中之后(或者其他类型的存储空间中),它可以被方便地转移到其他位置。请想象 Loan 对象中不仅包含了 InterestRate,还包含了贷款应用程序中所需的其他所有属性值。那么 Loandata.txt 文件可以被递交到中心部门进行验证。如果窗体需要再次使用 Loan 对象,那么代码将类似于下面的样子:  
   
  Private pb As PropertyBag ' 声明一个 PropertyBag 对象。  
  Private LoanObject As Loan ' 声明一个 Loan 对象。  
   
  Private Sub Form_Load()  
  Dim varTemp As Variant  
  Dim byteArr() as Byte  
   
  ' PropertyBag 对象的实例化。  
  Set pb = New PropertyBag  
  ' 将文件的内容读入一个 Variant 中。  
  Open "C:\Loandata.txt" For Binary As #1  
  Get #1, , varTemp  
  Close #1  
  ' 将 Variant 赋值到一个 Byte 数组中。  
  ByteArr = varTemp  
  ' 赋予 PropertyBag Contents 属性。  
  Pb.Contents = ByteArr  
  ' 使用 PropertyBag 进行对象实例化。  
  Set LoanObject = pb.ReadProperty("MyLoanObject")  
  End If  
   
  有人可能已经注意到,对象需要被赋值三次:首先从文本文件到 Variant,然后从 Variant 到 Byte 数组,最后才赋值到 Contents 属性。这是因为,Contents 属性只能接受 Byte 数组,如果试图将其他数据类型赋予它,得到的将是一条错误信息。  
   
  那么,到底发生了什么呢?我们是否真的在甲地创建了一个对象,而在乙地重新使用它呢(完全保持了它的数据)?其实,不完全是这样的。实际上,原始的对象已经被消灭了,我们在 PropertyBag 中实际传递的其实只是对象的一份精确副本,而不是对象本身。这种“克隆”一个对象以便进行复用的能力是一种功能非常强大的概念,它对于工作流应用程序的设计尤为重要。

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。