1
A
回答
1
不,它不。
如果您無法正確釋放對進程外COM服務器的所有引用並正確關閉COM,則可能導致該服務的實例處於奇怪狀態(在釋放所有引用後,所有內容都應該正常,但有時COM可能會緩存部分進程封送層)。
一個進程外的COM服務可以被設計爲爲每個客戶端(在服務內部或跨服務)提供獨立的組件實例,它們是完全獨立的(即使託管在同一個進程中),在這種情況下很難看到一個客戶端的故障會影響其他實例(除了在實例上浪費內存,直到COM最終將其更新)之外。如果實例共享狀態,即使客戶端完全按照規則運行,它們當然也可能會產生干擾。
1
您引用該引用的來源非常重要,以便我們可以獲取上下文。就我所知,你從一本關於DirectShow編程的書中得到了這些。它實際上指的是需要調用CoUninitialize()。
是的,這很重要。一個線程在開始使用任何COM API函數之前應該調用CoInitializeEx()來初始化COM基礎結構。當線程結束時,您應該調用CoUninitialize(),以便正確清理內容。通常在程序的main()函數結束時。如果不這樣做,可能會導致其他應用程序發現其實際已死亡的註冊類工廠時失敗。
否則這樣做什麼也沒有與COM進程外服務器做任何事情都不得不限制自己。您可以使用CoRegisterClassObject()的REGCLS參數指定共享模式。當然,服務器應該不是退出並且調用CoUninitialize直到全部其對象被釋放。
相關問題
- 1. 相同的Zookeeper實例可以被多個服務使用嗎?
- 2. 應用程序被服務調用時的不同行爲
- 3. COM進程外服務器啓動多個實例
- 4. 服務應用程序和com插件
- 5. NIB不能被許多不同的類使用是否正確?
- 6. 使用相同應用程序服務的多個應用程序
- 7. 遠程COM服務器實例化
- 8. 並行連接到同一個COM服務器的多個實例
- 9. 實現相同服務合同接口的多個WCF服務
- 10. C#Windows服務COM異常80080005啓動應用程序時
- 11. 防止應用程序在未使用服務時被殺死
- 12. 使用C#類庫作爲COM +服務器應用程序
- 13. 爲同一個應用程序運行多個rails服務器
- 14. 多個同時SQL連接超時在多線程Windows服務
- 15. 多個線程不能同時工作
- 16. 不能讓Django應用程序服務正確的URL
- 17. Windows服務:同一個服務類的多個實例?
- 18. 實用程序類爲服務於不同的TabItems
- 19. 使用多個WCF服務合同
- 20. 導出相同COM組件的多個服務
- 21. 跨應用程序域的多個服務實例
- 22. 如何創建多個python應用程序服務器實例?
- 23. 通過應用程序同時執行相同程序包的多個實例?
- 24. 實時升級.NET應用程序中使用的COM對象
- 25. 如何使用同一個域來服務來自不同服務器的兩個應用程序
- 26. 使用REGASM&COM時不在GAC中的程序集的多個搜索路徑
- 27. 我可以在使用來自多個服務器的REST式服務時使用相同的RestTemplate實例
- 28. 在Web應用程序中實時使用REST Web服務
- 29. 服務於同一應用程序的多個服務器上的Node.JS /流星
- 30. 使用同一應用程序的不同版本運行2個Windows服務
COM服務可以爲所有客戶端提供唯一實例嗎? – COMer 2010-08-26 09:34:38
@COMer如果你的意思是一個奇怪的例子(即只有一個實例,無論是1個還是1000個客戶端):是的。您需要重寫實例工廠(這取決於您如何創建COM組件,並且某些工具可能沒有足夠的靈活性來執行此操作)。 – Richard 2010-08-26 10:07:24