我正在使用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是一个非常糟糕的主意。在应用程序启动和关闭时执行一次。

10-06 14:33