在应用程序终止执行之前,COM必须再次closures。 (如果另一个程序尝试使用COM服务,未能closuresCOM可能会导致执行错误。)
上面的引用暗示着,对吗?
Windows下与GHCI的Haskell外部函数接口
减法操作不起作用
免费的打印机打印到PNG(或SVG)
不,不。
如果你不能正确地释放所有对进程外COM服务器的引用并正确地关闭COM,那么可能导致该服务的实例处于奇怪状态(释放所有引用后,所有东西都应该是OK的,但是有时候COM可能会缓存部分的进程编组层)。
一个进程外COM服务可以被设计成为每个客户端(在服务内部或跨服务)提供独立的组件实例,这些实例是完全独立的(即使在同一个进程中),在这种情况下很难看到一个客户端会影响其他实例(除了在实例上浪费内存,直到COM最终将其超时)。 如果实例共享状态,即使客户端完全按照规则运行,它们当然也可能会干扰。
你引用这个引用的来源是相当重要的,所以我们可以得到上下文。 就我所知,你可以从一本关于DirectShow编程的书中得知。 它实际上指的是需要调用CoUninitialize()。
是的,这很重要。 一个线程应该调用CoInitializeEx()来初始化COM基础设施,然后开始使用任何COM API函数。 当线程结束的时候,你真的应该调用CoUninitialize(),这样就可以正确地清理。 通常在程序的main()函数的末尾。 如果不这样做,可能会导致另一个应用程序发现一个实际上已经死亡的注册类工厂时失败。
否则这与COM进程外的服务器不得不以任何方式限制自己无关 。 您可以使用CoRegisterClassObject()的REGCLS参数指定共享模式。 当然,服务器不应该退出并调用CoUninitialize,直到它的所有对象被释放。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。