Option Explicit'* ************************************** * '* 模块名称:modStream.bas '* 模块功能:序列化类对象为字符串 '* 作者:lyserver '* ************************************** *'- ----------------------------------- ' 函数说明:将类对象序列化为字符串 '- ----------------------------------- Function ObjectSaveToString(objSource As Object, KeyName As String) As String Dim i As Long Dim objBag As New PropertyBag Dim bytData() As Byte
On Error Resume Next If objSource Is Nothing Or Len(KeyName) = 0 Then Exit Function
objBag.WriteProperty KeyName, objSource bytData = objBag.Contents For i = 0 To UBound(bytData) ObjectSaveToString = ObjectSaveToString & IIf(bytData(i) < 16, "0", "") & Hex(bytData(i)) Next End Function'- ----------------------------------- ' 函数说明:从字符串中加载类对象 '- ----------------------------------- Function ObjectLoadFromString(strSource As String, KeyName As String) As Object Dim i As Long, nLen As Long Dim objBag As New PropertyBag Dim bytData() As Byte
On Error Resume Next nLen = Len(strSource) If nLen = 0 Or Len(KeyName) = 0 Then Exit Function
ReDim bytData(nLen / 2 - 1) For i = 0 To UBound(bytData) bytData(i) = Val("&H" & Mid(strSource, i * 2 + 1, 2)) Next objBag.Contents = bytData Set ObjectLoadFromString = objBag.ReadProperty(KeyName) End Function'测试代码如下: Sub Main() Dim rstTemp As Object Dim strStream As String
Option Explicit'* ************************************** *
'* 模块名称:modStream.bas
'* 模块功能:序列化类对象为字符串
'* 作者:lyserver
'* ************************************** *'- -----------------------------------
' 函数说明:将类对象序列化为字符串
'- -----------------------------------
Function ObjectSaveToString(objSource As Object, KeyName As String) As String
Dim i As Long
Dim objBag As New PropertyBag
Dim bytData() As Byte
On Error Resume Next
If objSource Is Nothing Or Len(KeyName) = 0 Then Exit Function
objBag.WriteProperty KeyName, objSource
bytData = objBag.Contents
For i = 0 To UBound(bytData)
ObjectSaveToString = ObjectSaveToString & IIf(bytData(i) < 16, "0", "") & Hex(bytData(i))
Next
End Function'- -----------------------------------
' 函数说明:从字符串中加载类对象
'- -----------------------------------
Function ObjectLoadFromString(strSource As String, KeyName As String) As Object
Dim i As Long, nLen As Long
Dim objBag As New PropertyBag
Dim bytData() As Byte
On Error Resume Next
nLen = Len(strSource)
If nLen = 0 Or Len(KeyName) = 0 Then Exit Function
ReDim bytData(nLen / 2 - 1)
For i = 0 To UBound(bytData)
bytData(i) = Val("&H" & Mid(strSource, i * 2 + 1, 2))
Next
objBag.Contents = bytData
Set ObjectLoadFromString = objBag.ReadProperty(KeyName)
End Function'测试代码如下:
Sub Main()
Dim rstTemp As Object
Dim strStream As String
'创建一个临时ADO记录集对象
Set rstTemp = CreateObject("ADODB.Recordset")
rstTemp.Fields.Append "姓名", adBSTR, 4 '设置临时记录集字段
rstTemp.Fields.Append "性别", adBSTR, 1
rstTemp.Open '打开记录集
rstTemp.AddNew Array("姓名", "性别"), Array("张三", "男") '添加记录
'将记录集对象序列化为字符串
strStream = ObjectSaveToString(rstTemp, "rstTemp")
'关闭并销毁ADO记录集对象
rstTemp.Close
Set rstTemp = Nothing
'从字符串中加载记录集对象
Set rstTemp = ObjectLoadFromString(strStream, "rstTemp")
Debug.Print rstTemp.Fields(0).Value '显示结果
'关闭并销毁ADO记录集对象
rstTemp.Close
Set rstTemp = Nothing
End Sub