В чем разница между двумя строками кода ниже:
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;
, я получаю ошибку RPC_E_SERVERFAULT при тестировании интерфейса на C # и мне приходится явно вызывать GC.Collect (), чтобы избежать появления ошибки после создания нескольких объектов. При тестировании интерфейса в VC ++ ошибка согласуется, однако когда она возникает, она отличается. Если я закомментирую создание экземпляра IInterface, код работает нормально, однако, когда я пытаюсь создать экземпляр, я получаю ту же ошибку, что и раньше, только неопределенную ошибку необработанного исключения. Что я здесь делаю не так?