是什麼下面兩行代碼之間的區別:COM對象清理
CComPtr<IInterface> m_interface;
IInterface* m_interface;
我知道,但是CComPtr幫助消除內存泄漏,但我得到不一致的結果。當聲明指針爲CComPtr<IInterface> m_interface;
並在我的C#代碼中使用接口時,沒有錯誤,但是在VC++中使用接口時,即使我註釋掉IInterface的實例創建,我也會得到未處理的異常錯誤。
我敢肯定這個問題是在這裏的某個地方:
STDMETHODIMP CSomeClass::get_IClass(IClass** var)
{
return m_class_var->QueryInterface(var);
}
STDMETHODIMP CSomeClass::putref_IClass(IClass* var)
{
m_class_var = var;
return S_OK;
}
當我宣佈接口指針有:IInterface* m_interface;
我測試在C#中的接口時得到RPC_E_SERVERFAULT錯誤,必須顯式調用GC。 Collect()避免在實例化幾個對象後引發錯誤。當在VC++中測試接口時,錯誤是一致的,但是當它發生時是不一樣的。如果我註釋掉IInterface的實例創建,代碼運行良好,但是當我嘗試創建一個實例時,我得到和以前一樣的錯誤,只是模糊的未處理的異常錯誤。我在這裏做錯了什麼?
你真的應該花15分鐘製作一個很短的片段,將說明問題。 – sharptooth 2010-02-26 07:56:01
你說「在VC++中使用接口我得到一個未處理的異常錯誤」 - 你可以使用VC++中的接口向我們展示代碼嗎? – 2010-02-26 09:45:26