我有一个使用COM对象的单线程应用程序。在开始时,我实际上两次调用CoInitialize(0)
- 一次在我的代码中,第二次在应用程序的另一个子系统的代码中。第一个调用返回S_OK
,第二个调用返回S_FALSE
- 正如MSDN所说的那样。
当应用程序停止时,它会调用CoUninitialize()
两次,但在这些调用之间它会尝试调用某些COM对象的方法 - 这些调用只会因访问冲突而崩溃,因为我认为COM对象在第一次调用时已完成并释放到CoUnitialize()
。如果我删除了对CoInitialize()
/ CoUnitialize()
的重复呼叫,则可以正常工作。
但为什么会这样呢? MSDN说我可以重复拨打CoInitialize()
,并且只能将这些呼叫与匹配的CoUnitialize()
次呼叫配对。
为什么COM对象在第一次调用CoUninitialize()
时完成。
答案 0 :(得分:0)
听起来你正确的做法是正确的,但是,检查以确保在应用程序的主窗口关闭之后以及在该窗口的消息循环已经完成之后完成了您的原始调用。