为COM dll编写标准C ++包装器

时间:2016-02-11 14:30:41

标签: c++ com

我有一个带有标题的COM DLL,我想编写一个C ++包装器,以获得本机C ++接口(没有BSTR等)。它导出两个函数来创建和销毁一个Foo对象(加上各种其他函数来注册/取消注册com,我不需要)。 Foo对象是类FooWrapper中的成员,用于调用函数Bar。 我的方法有效,但我不确定这里的内存分配。 成员mFoo的类型为IFoo*,所以我应该使用像这样的智能指针吗? :

std::auto_ptr<IFoo*>  msFoo = std::auto_ptr<IFoo*>(new IFoo*);

IFoo*究竟是什么?为什么它来自IDispatch? 到目前为止,这是我的班级:

class FooWrapper{
public:

FooWrapper(){CreateFoo();}
~FooWrapper(){DestroyFoo();}
void CreateFoo(){//Uses DLL Funtcion to create Foo object}
void DestroyFoo(){//Uses DLL Funtcion to destroy Foo object}

void Bar(std::string sName)
{
BSTR sbName = SomeStaticClass::ConvertToBSTR(sName);
    HRESULT hRes = mFoo->Bar(sbName);
    if (hRes != S_OK)
     throw exception;
}

protected:
IFoo * mFoo;
};

FooHeader.h:

MIDL_INTERFACE("B32876428-AAAA-8742-A224-XXXXXXXXXXX")
IFoo : public IDispatch
{
 public:
   virtual HRESULT STDMETHODCALLTYPE Bar(BSTR name) = 0;
}

0 个答案:

没有答案