我正在使用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,因此我创建的包装程序是不必要的。
我试图用Google搜索它,但是我不知道是否需要包装器。
所以我的问题是,如果我使用CComPtr,是否还需要创建一个包装器?
最佳答案
不,不需要您的包装器,而且像这样初始化和取消初始化COM是一个非常糟糕的主意。在应用程序启动和关闭时执行一次。