如何在CComObject

时间:2017-05-06 15:25:12

标签: c++ com

我使用CreateInstance创建一个CComObject,然后调用AddRef。

通过调用QueryInterface创建Created对象接口指针。

然后这些接口指针存储在std :: map中以备将来使用。

在将来使用的一个函数中,需要从std :: map中删除该对象,因此我试图在从std :: map中删除对象之前调用 - > Release()方法。

但是在尝试调用对象Release()方法时遇到错误。

std::map<long,CAdapt<CComPtr<ITrain>>> m_map;
CComObject<ITrainStub> m_pTrain;
CComObject<ITrainStub>::CreateInstance(&m_pTrain);
m_pTrain->AddRef();
CComPtr<ITrain> m_Train;
m_pTrain->QueryInterface(IID_ITrain,(void**)&m_Train);
m_map[i] = m_Train;

在另一个函数中访问train对象:

  iterator it = m_map.find(x);

  CComPtr<ITrain> m_Train;
  m_Train = it->second;
  m_Train->Release();
  m_map.erase(x);

在第二个函数中遇到了这个问题,其中Release方法在atlcomcli.h中提出错误说明_ATL ....

0 个答案:

没有答案