在应用程序终止之前 执行时,必须关闭COM 再次。 (未能关闭COM可以 导致执行错误时 另一个程序试图使用COM 服务。)
以上引用暗示,对吧?
答案 0 :(得分:1)
不,不。
如果您未能正确释放对进程外COM服务器的所有引用并正确关闭COM,则可能导致该服务的实例处于奇怪状态(释放所有引用后一切都应该正常,但有时COM可能会缓存部分进程外编组层。)
进程外COM服务可以设计为每个客户端(服务内部或服务之间)具有完全独立的单独组件实例(即使托管在同一进程中),在这种情况下很难看到如何一个客户端的故障会影响其他实例(除了在实例上浪费内存,直到COM最终将它们排除在外)。如果实例共享状态,即使客户完全符合规则,它们当然也会干扰。
答案 1 :(得分:1)
引用该引用的来源非常重要,这样我们才能获得上下文。就像我所看到的那样,你从一本关于DirectShow编程的书中得到了它。它实际上指的是需要调用CoUninitialize()。
是的,这有点重要。在开始使用任何COM API函数之前,线程应调用CoInitializeEx()来初始化COM基础结构。你真的应该在线程结束时调用CoUninitialize()以便正确清理内容。通常在程序的main()函数结束时。如果没有这样做可能会使另一个应用程序在找到实际上已经死亡的注册类工厂时失败。
否则 nothing 与COM进程外服务器无关,必须以任何方式限制自己。您可以使用CoRegisterClassObject()的REGCLS参数指定共享模式。当然,服务器不退出并调用CoUninitialize直到所有其对象被释放。