COM Callable Wrapper 和 .NET 对象生命周期

发布于 2024-08-19 12:38:10 字数 179 浏览 4 评论 0原文

我有从 C++ COM 客户端调用的 c# .NET 程序集。当客户端进程显式释放 COM 对象时,CCW 会释放它的内部引用,从而使 .NET 对象符合垃圾回收的条件。

如果 .NET 对象具有打开日志文件的静态构造函数怎么办?是否有一个优雅的解决方案可以在没有客户端明确请求的情况下关闭日志文件?

TIA。

I have a c# .NET assembly that gets called from a C++ COM client. When the client process explicitely release the COM object, the CCW release it'sinternal reference, thus making the .NET object eligible for garbage collection.

What if the .NET object has a static constructor that open a log file ? Is there an elegant solution to close the log file without an explicit request from the client ?

TIA.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

财迷小姐 2024-08-26 12:38:10

经过一些测试后,使用 AppDomain.ProcessExit EventHandler 似乎是关闭日志文件的不错选择。

After some testing using AppDomain.ProcessExit EventHandler seems to be a good choice to close the log file.

盛装女皇 2024-08-26 12:38:10

如果您不想修改 COM 客户端,那么您就无法使用任何确定的关闭魔法。最终,当 CCW 丢失 GC 根后 GC 调用句柄的 Finalizer 时,文件句柄将在将来的某个时间关闭(假设它是 FileStream)。

-Oisin

If you don't want to modify the COM client, then you're out of luck for any determinate close magic. Ultimately the file handle will be closed at some time in the future (assuming it's a FileStream) when the handle's Finalizer is called by the GC after your CCW loses its GC root(s.)

-Oisin

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文