套間有兩種類型:
1>單線程套間 STA
2>多線程套間 MTA
3>臨介區套間 RTA(未來可能會新增)
其中 單線程套間 在一個進程中可以有多個.
而 多線程套間 在一個進程中只能有一個.
單線程套間 與相關的線程是1對1的關系.
多線程套間 與相關的線程是1對多的關系.
一般情況下 套間 與 套間之間防問,都需要進行序列化處理.
而如果在同一進程下 的 單線程套間 防問多線程套間COM會自動進行優化處理.
單線程套間應該有消息循環,去把對它們的調用轉成序列化.
在同一進程的情況下:
STA是通過把調用轉成 消息再由擁有該STA的線程去處理.
MTA則是可以直接調用.
RTA與STA類似,但它的實現方式是為調用加把鎖,然后其它套間調用它的時候就鎖住。
與STA不同的是調用在RTA中的對象是發起調用的那個線程,而不是擁有RTA的那個線程。
在不同進程下:
所有調用都會通過 代理\存根 進行序列化處理
進程外:
CoMarshalInterface
CoUnmarshalInterface
CreateStreamOnHGlobal //創建與獲取內存流
GetHGlobalFromStream
進程內用的簡化函數:
CoMarshalInterThreadInterfaceInStream
CoGetInterfaceAndReleaseStream
聲明為Free的COM對象,為什么在本地STA套間中訪問會慢些?
COM把所有細節問題都集結到一個點上:如何正確的獲取接口?'
代理接口指針的列集會有問題,因此引入:
GIT Global Interface Table
IGlobalInterfaceTable
posted on 2009-01-12 11:03
鹿哥 閱讀(442)
評論(0) 編輯 收藏 引用 所屬分類:
COM