當CoInitialize返回RPC_E_CHANGED_MODE時,如果我調用CoUninitialize,會發生什麼情況?它會導致任何問題?如果我在CoInitialize返回RPC_E_CHANGED_MODE時調用CoUninitialize會發生什麼?
回答
當您停止線程上的所有COM活動時,可以安全地調用CoUninitialize
。留下這樣的COM活動 - 廣義上說,尤其是。留下引用的存根和代理 - 很可能導致未定義的行爲和排序異常。
由於CoInitialize
和CoUninitialize
可以安全地多次調用,您的不成功的CoUninitialize
調用可能會根據上下文產生不同的後果。
當你有你的CoUninitialize
調用之前線程2+ CoInitialize
電話,什麼也不會立即發生,但你將有問題後更接近線程終止時,上層代碼調用它的大概配對CoUninitialize
電話終於結束COM初始化。請注意,在這種情況下,您的CoUninitialize
不允許您更改單元模式,因爲您的調用不會終止線程上的COM(當您在線程上完全未初始化COM時,只能更改單元模式)。總之,你應該堅持基本原則:你永遠不要自己打電話CoUninitialize
。您可以撥打CoInitialize
,如果成功,則在完成COM後,必須在線程後面致電CoUninitialize
。走出這條道路很可能會讓你陷入困境,這對於快速識別和排除故障來說往往是非常痛苦的。
引用[文檔](https://msdn.microsoft.com/en-us/library/windows/desktop/ms695279(v = vs.85).aspx):「要在線程上優雅地關閉COM庫, **每次成功調用CoInitialize或CoInitializeEx,包括任何返回S_FALSE的調用,都必須通過相應的CoUninitialize調用進行平衡。「 –
- 1. 調用CoInitialize/CoUnInitialize
- 2. CoInitialize()/ CoUninitialize()調用配對
- 3. 誰負責調用CoInitialize和CoUninitialize如果代理進程或COM +
- 4. 難道我還需要調用CoInitialize(NULL)和CoUninitialize()如果我切換到ATL?
- 5. 如果我在OnTouchListener中返回false,會發生什麼?
- 6. C++ - 如果我返回一個* = b;`會發生什麼?
- 7. 如果我錯過了Facebook的回調,會發生什麼?
- 8. 如果我調用GlobalLock()然後調用GlobalUnlock()會發生什麼?
- 9. 如果我在main中調用fork(),會發生什麼?
- 10. 如果action類在struts中返回null,會發生什麼?
- 11. 如果我用空的url調用jQuery.post()會發生什麼?
- 12. 如果我在鏈接時不使用-g,會發生什麼
- 13. 如果多次調用GetOrAdd()ValueFactory,額外的返回值會發生什麼?
- 14. 返回值(返回對象)忽略時會發生什麼?
- 15. 如果我不直接調用willMoveToParentViewController&didMoveToParentViewController,會發生什麼?
- 16. 如果我們直接調用run方法會發生什麼?
- 17. 如果我從AsyncTask調用一個方法會發生什麼?
- 18. 如果我不調用transaction.close或transaction.rollback,會發生什麼情況?
- 19. 如果我調用WaitHandle.Dispose(),等待線程會發生什麼?
- 20. 如果我自己調用run()方法會發生什麼?
- 21. 當我從SQL遊標中返回時會發生什麼?
- 22. 如果沒有「捕獲」,返回值會發生什麼?
- 23. 如果發生錯誤,ParseUser.signUpInBackground()會返回什麼?
- 24. 如果函數不返回,執行堆棧會發生什麼?
- 25. 如果/當DllImport被多次調用時會發生什麼?
- 26. 我調用MPI_Init()後會發生什麼?
- 27. 如果我在Observable的Subscribe回調中拋出異常,會發生什麼?
- 28. 返回ActionResult後會發生什麼?
- 29. IRouteConstraint.Match返回false後會發生什麼
- 30. 調用setCancelsTouchesInView時會發生什麼?
你試過了嗎? – Mifeet
您進行的每個COM調用都將失敗,並顯示CO_E_NOINITIALIZED。由於您使用不適當的CoUnitialize()調用未初始化COM。是的,這是一個問題。 –