描述:
#include "stdafx.h"
#include <windows.h>
#include <comdef.h>
#include <list>
#include "e:\sdbg\interfaces\interfaces.h"
class CDev
{
public:
ISerialDevice* m_pdev;
CDev (ISerialDevice* pdev) : m_pdev (pdev) {}
CDev (const CDev& dev)
{
m_pdev = dev.m_pdev;
}
~CDev () {
if (m_pdev)
{
m_pdev->Release ();
m_pdev = NULL;
}
}
};
int main(int argc, char* argv[])
{
::CoInitialize (0);
ISerialDevice * psd = 0;
CLSID clsid;
HRESULT hr = ::CLSIDFromProgID (_bstr_t ("YMIDevices.QDSeries"), &clsid);
if (FAILED(hr))
return 1;
hr = ::CoCreateInstance (clsid, 0, 5, IID_ISerialDevice, (void**) &psd);
if (FAILED(hr))
return 1;
std::list<CDev> devlist;
psd->AddRef ();
devlist.push_back (CDev (psd));
::CoUninitialize ();
return 0;
}
解决方案1:
把这句话去掉吧
::CoUninitialize ();
你的问题出在,你将你的接口包装到一个类中去了,这相当于一个智能指针,你的指针的Release是在类的析构中调用的,而你的类的析构调用是在main函数结束之后才会调用,这时你已经调用了CoUninitialize,在这之后Release指针是会报错的