我用下面的方法託管.NET庫在我的C++程序,雖然不是一個詳盡的列表:需要使用.NET支持複製IDispatch *;不知道類名
CorBindToRuntimeEx()
GetDefaultDomain()
CreateInstance()
Invoke()
我必須對應於.NET類C++類。每個類實例都包含一個CComPtr<IDispatch>
,我用它來調用函數和獲取/設置成員變量。
這工作正常,除了我拷貝我的C++類時,我最終得到了兩個指向同一個.NET實例的C++類實例。當我在一個實例中更改變量值時,它會反映在另一個實例中。
所以,我真的很想複製我的IDispatch指針,以便每個C++類實例都有一個唯一的.NET類實例。我可以撥打CreateInstance()
,但由於各種原因,找出圖書館和班級名稱很不方便。
TL;博士
我如何可以複製我的.NET支持的IDispatch指針頭也不擡類/庫的名稱?
謝謝!
一般來說,這是一個壞主意(TM)從非託管代碼使用.NET;另一種方式很好。但是,您可以檢查.NET對象是否支持ICloneable,如果是,則使用它來克隆它。更好的是,如果您絕對必須這樣做,那麼通過聲明私有或受保護的副本構造函數和複製賦值運算符,可以使您的C++實例不可複製。 – 2011-03-12 03:21:36
嗯,我已經做到了。除了複雜性和低效率之外,爲什麼它不是一個好主意?我顯然不是從本地代碼中使用.NET來獲得樂趣。 – David 2011-03-17 00:44:19
除了複雜性和低效率以外,還可以。它就像從5公里自由降落到地球一樣,除了最終的影響外,還可以。 :-) – 2011-03-17 00:54:43