3
我一直在閱讀很多關於COM公寓和.NET互操作,但我還沒有找到這個問題的答案呢。這讓我相信我可能會問錯誤的問題。哪個公寓是與COM Callable Wrapper關聯的?
我知道.NET線程,就像本地線程一樣,既可以是MTA也可以是STA,我可以在這裏找到相關文檔,但我很少看到這些對象及其CCW如何與這些公寓關聯。
我的猜測是CCW的線程模型是'Both',並且CCW與創建線程所屬的任何公寓相關聯。
哪個公寓是與CCW有關的,我能夠控制這種行爲嗎?
我明白了,但是那些沒有被CoCreateInstance實例化的對象呢?例如,如果COM客戶端調用x.CreateWidget,並且該方法的實現返回一個新的.NET對象。返回的Widget的CCW會繼承x的CCW的公寓嗎? –
這是一個非常好的問題。在默認情況下(線程模型=兩者),答案很明顯 - 正常的COM規則會將新對象放置在其創建者(x)的公寓中。但是,我不知道在創建新的COM包裝器以返回到非託管客戶端時,Interop層是否尊重自定義註冊:例如,如果x是Both而Widget註冊爲Apartment threaded(或反之亦然)。你可以試試看。 –