我打电话给CoInitializeEx,特别是:
CoInitializeEx(NULL, COINIT_DISABLE_OLE1DDE | COINIT_APARTMENTTHREADED);
在我的应用程序创建的线程中,但随后在应用程序退出之前终止。将这些与CoUninitialize调用配对是否很重要,或者在线程终止时是否释放这些资源?
答案 0 :(得分:14)
当进程终止时,通常会将资源返回给系统,而不是当其中一个线程执行时。
但是,CoUninitialize()不仅释放资源并卸载DLL,它还会进入模态消息循环,以便在线程终止之前抽取剩余的COM消息。文档说:
如果还有剩余的对话,
CoUninitialize
会启动 模态消息循环并从中调度任何挂起的消息 此COM应用程序的容器或服务器。通过派遣 消息CoUninitialize
确保应用程序不会退出 在收到所有待处理的消息之前。非COM消息是 丢弃。
因此,为了避免调用方的RPC错误,我建议您遵循文档的建议,并在终止调用CoUninitialize()
的线程之前始终调用CoInitializeEx()
。