0

我正在使用 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,我还需要创建一个包装器吗?

4

1 回答 1

2

不,不需要你的包装器,而且,像这样初始化和取消初始化 COM 是一个非常糟糕的主意。在应用程序启动和关闭时执行一次。

于 2013-08-19T12:45:09.137 回答