【发布时间】:2011-01-21 04:20:18
【问题描述】:
下面两行代码有什么区别:
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 分钟制作一个很短的 sn-p 来证明问题。
-
你说“在 VC++ 中使用接口我得到一个未处理的异常错误”——你能告诉我们在 VC++ 中使用接口的代码吗?
标签: c# c++ com activex components