卸载应用程序域不清除C++ COM 对象静态成员
Unloading appdomain don't clear C++ COM object static members
我正在使用第三方C++COM对象,该对象似乎包含一些静态成员。问题是每次开始新运行时我都必须重置静态成员。因此,我目前需要关闭并打开我的应用程序。我尝试使用 AppDomain 卸载这些静态成员的整个内存,但我不知道为什么它不起作用。我正在使用 COM 对象Activator.CreateInstance(Type.GetTypeByCLSID)
我需要手动执行任何操作来释放这些实例吗?请注意,我检查过并且任何静态 C# 对象都会以这种方式释放。
非托管资源称为非托管资源,因为它们的内存不由托管垃圾回收器处理。
必须手动释放任何非托管资源。这是IDisposable
的目标之一(如果不是最重要的目标):它的实现有一些相关的非托管资源。例如,需要手动释放FileStream
,因为它是 Win32 API 调用的包装器。
总之,卸载AppDomain
或任何其他方法在这里都无济于事。当你不再需要这些 COM 静态资源时(即关闭应用时),你需要编写代码来释放它们。
相关文章:
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 如何在C++非托管/本机 DLL 中从注册免费 COM C# 托管 DLL 创建 COM 对象
- 从 WinRT C++组件访问 COM 对象
- 通过 COM 对象连接 x64 应用程序时出现问题
- 我如何知道COM对象与不同的COM UUIDS兼容
- 如何访问从 COM 对象返回的 VARIANT 数据类型中的安全数组C++?
- 2 个 COM 对象,并在另一个对象中使用其中一个对象的接口
- 尝试向 COM 对象添加另一个接口时出现静态强制转换错误 C2440
- 在没有共享 COM 对象的情况下使用 COM STA 或 MTA?
- 初始化com对象的问题
- UI自动化回调中com对象的所有权
- 从 COM 对象快速读取西里尔字母
- 如果从函数返回指向指针 COM 对象的指针,我是否需要 AddRef()?
- 使用 com 对象删除计划任务
- 如何使用OlesetClipboard将我的COM对象放置在剪贴板上时解决问题
- 在自定义源和 SmartTee 之间插入筛选器会泄漏 COM 对象
- COM 对象中的回调
- 如何在使用C++打开隐藏的 COM 对象时隐藏控制台窗口
- 将结构中的字节数组传递给 com 对象
- COM对象,并返回QVariant强制转换问题