我正在使用CComPtr来保存指向com对象的指针。
我还用一个类包装了资源:
class ResourceWrapper {
public:
ResourceWrapper()
{
CoInitializeEx(NULL, COINIT_MULTITHREADED);
HRESULT hr = S_OK;
if (FAILED( hr = CoCreateInstance(CLSID_Resource, NULL, CLSCTX_INPROC, IID_PPV_ARGS(&pResource)))||pResource==NULL)
{
throw std::runtime_error("failed to create instance");
}
}
~ResourceWrapper()
{
pResource =NULL;
CoUninitialize();
}
CComPtr<IResource> Get()
{
return pResource;
}
private:
CComPtr<IResource> pResource;
ResourceWrapper(const ResourceWrapper&);
ResourceWrapper operator=(const ResourceWrapper&);
};
但后来我认为可能CComPtr正在实施RAII,然后我创建的Wrapper是不必要的。
我试图谷歌,但我不明白我是否需要包装。
所以我的问题是,如果我使用CComPtr,我是否还需要创建一个包装器?
答案 0 :(得分:2)
不,你不需要你的包装器,而且初始化和未初始化COM就像这是一个非常糟糕的主意。在应用程序启动和关闭时执行一次。