首页 > 解决方案 > 为什么 C# 类库中的静态变量在从 VBA 实例化的对象中仍然存在?

问题描述

我以注册的 C# 类库的形式编写了一个插件,该类库具有 COM 公开的方法。

类中的静态对象似乎在Sub Main. 这是为什么?我可以阻止它并完全“重新加载/重新启动”库吗?(我确实将ctrPlugin对象设置为Nothing

在 VBA 中,我实例化类并从 C# 库中调用方法,如下所示:

Option Explicit

Sub Main
  Dim ctrPlugin
    Set ctrPlugin = CreateObject("MyLibrary.MyExposedClassName")
    ctrPlugin.OpenWpfWindowMethod
    Set ctrPlugin = Nothing
  End If 
End Sub

我遇到的问题是偶尔出现“内存不足”错误。在 c# 方法完成后,在宿主应用程序(ERP 系统)中显示。该错误在运行 ac# 方法时永远不会显示,总是在它完成之后。当我使用 C# 应用程序时,我从来没有遇到过这些问题。C# 应用程序和类库之间的对象生命周期和垃圾收集过程之间是否存在差异?

我已经在 Visual Studio 中对我的库进行了记忆分析,并消除了一些 memleaks。(其中一个是由 WPF 绑定到不是 DependencyObjects 或继承的 INotifyPropertyChanged 的​​对象引起的)

标签: c#vbadllstaticclass-library

解决方案


推荐阅读