基于this link,我创建了Windows Processing Monitoring
和Windows Service Monitoring
个DLL,这些DLL将由主应用程序调用并在线程中运行它们(使用boost::thread
)来获取数据是异步的。考虑到这两个dll都是由我的应用程序运行的。我收到了其中一个应用的错误Failed to initialize security. Error code = 0x80010119
。并且当停止这些dll的线程时,在它们中都调用CoUninitialize
。我在这里遇到了崩溃。这可能是因为后一个线程中的CoUninitialize
可能会尝试清除前一个线程清除的内存。
如果是这样,我如何检查一个线程中的CoUninitialize
是否成功,以便我不会在另一个线程中调用它。
答案 0 :(得分:0)
CoUninitialize是COM库的一部分,WMI可以使用COM接口,但与其初始化或处理无关。不要在一个进程中两次调用CoUninitialize。请注意,您的两个DLL可能共享应用程序上下文并在其中执行。
答案 1 :(得分:0)
"如何检查一个线程中的CoUninitialize
是否成功,以便我不会在另一个线程中调用它。"
这告诉我你的错误,但它不在CoUninitialize
。您假设CoUninitialize
是整个流程的。实际上,CoUninitialize
镜像CoInitializeEx
,并且应该在每个线程上完成。因此,您的崩溃几乎肯定是由一个线程上的CoInitializeEx
和另一个线程上的CoUninitialize
引起的。
修复是在两个线程上执行CoInitializeEx
,并在两个线程上执行CoUninitialize
。