在VBA中使用AppDomain保留自定义类对象

时间:2017-07-10 13:34:24

标签: .net excel vba excel-vba mscorlib

遵循构思形式this answer我正在尝试使用VBA在Excel中创建通用持久存储,但是在VBA重置后从存储中检索存储对象时遇到问题。

作为简化示例,假设我想要保留自定义类'MyClass'的实例:

'MyClass
Public someText as String

存储的简化版本:

Public Sub Save()
  Dim x As MyClass: Set x = New MyClass
  x.initialized = True
  Dim domain As mscorlib.AppDomain
  Set domain = GetAppDomain()
  domain.SetData "x", x
End Sub

Public Sub Load()
  Dim y As MyClass 'alternative: Object
  Dim domain As mscorlib.AppDomain
  Set domain = GetAppDomain
  If IsObject(domain.GetData("x")) Then
    Set y = domain.GetData("x") 'Type mismatch error
  End If
  Debug.Print y.initialized 'Run-time error '-2147418105 (80010007)'
End Sub

Public Function GetAppDomain() As mscorlib.AppDomain
  Dim host As New mscoree.CorRuntimeHost
  host.Start
  Dim Unk As IUnknown
  host.GetDefaultDomain Unk
  Set GetAppDomain = Unk
End Function

当我连续运行Save and Load subs时,我得到了所需的输出(“true”)。但是,如果我重置应用程序(运行>在VBE中重置),我会收到类型不匹配错误。当我将y的类型更改为Object时,在尝试打印y.initialized

时出现自动化错误(运行时错误'-2147418105(80010007)')

最初我试图在上面的链接中有一个持久化的词典,在这种情况下,我能够从域中获取词典,键仍然存在,但我无法将包含的对象强制转换回来它的原始课程。

任何想法如何解决?

0 个答案:

没有答案
相关问题