我有一个带有标题的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;
}