如何从 COM 服务器调用 release

se_*_*vel 2 windows com

我正在编写一个 Com 服务器,并且我编写了代码来检测 COM 客户端意外关闭时的情况,在这种情况下,我应该在 COM 服务器代码中关闭 COM 服务器。

我怎样才能做到这一点?

UPD:我遇到了 COM 服务器挂起或更正确的情况我无法从 COM 客户端连接到 COM 服务器,但是包含 COM 服务器的应用程序是活动的,所以我认为 COM 服务器可以检测到所有旧的 COM 客户端都已断开连接/关闭/崩溃,应用程序将重新启动,因为没有附加新客户端。

我在单独的线程中在 COM 客户端中编写了以下代码

while(not we are closing)
{
   unknown->QueryInterface(IComServer, &server);

   if (server)
     return;
}
Run Code Online (Sandbox Code Playgroud)

所以 COM 客户端可以等到服务器真正准备好工作

UPD2:刚刚测试:12 分钟后我的 COM 服务器关闭

Ray*_*hen 5

COM 定期 ping 客户端以查看它们是否还活着并从死客户端运行接口。所以你的服务器最终会发现。

  • 崩溃应该在客户端断开连接后 6 或 12 分钟后发生,fwiw。它确实发生了。您是否在服务器对象的 Release() 方法上放置了一个断点以确认它没有被调用?可能还有另一个参考使您的服务器保持活动状态。 (2认同)