所以我想讓我的C++代碼決定何時銷燬託管對象。 (因爲它們被傳遞給它作爲委託在C++端事件上被調用)。如何保持活動託管代碼對象作爲SWIG shared_ptr的傳遞給非託管代碼?
我有一個簡單的對象結構:EventGenerator + Delegates。
在我的託管方面,我有一個EventGenerator的包裝器和Delegates接口的包裝器,從中創建託管代理器(使用%feature("director")
)。在我的C++代碼中,我使用shared_pointers來保持代表活着。我使用SWIG功能shared_ptr
。
只要EventGenerator處於活動狀態,我需要我的託管代表處於活動狀態。然而,GC不知道EventGenerator和Delegates之間的anu連接。我不想知道什麼時候對象在C#端被破壞 - 我想讓C++端來控制(使用shared_ptr的)。
那麼SWIG共享指針應該怎樣做才能在事物的託管方面維持自己?
我發現的唯一解決方案是在C#端擴展EventGenerator對象,以便向它添加委託會將該委託添加到列表中。它的作品,但我希望有一個解決方案。
有什麼辦法使SWIG帳戶使用共享指針ref計數器這樣的事情? (所以只有在C++主機死後代理纔會被託管代碼銷燬?)
mono/linux是否支持C++/CLI? – DuckQueen
不,混合模式程序集自然具有爲Win32/Win64編譯的非託管C/C++代碼,並且包括通過CRT函數調用OS函數,因此儘管Mono支持託管代碼,但它不能在Linux上運行。 –