实现IMarshal接口,编译的时候报 “不能实例化抽象类 ”

好人吗 2014-02-11 04:33:29
代码如下:
class ATL_NO_VTABLE CMarshalTest :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMarshalTest, &CLSID_MarshalTest>,
public IDispatchImpl<IMarshalTest, &IID_IMarshalTest, &LIBID_TestMarshalLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IMarshal

{
public:
CMarshalTest()
{
}

DECLARE_REGISTRY_RESOURCEID(IDR_MARSHALTEST)


BEGIN_COM_MAP(CMarshalTest)
COM_INTERFACE_ENTRY(IMarshalTest)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IMarshal)
END_COM_MAP()



DECLARE_PROTECT_FINAL_CONSTRUCT()

HRESULT FinalConstruct()
{
return S_OK;
}

void FinalRelease()
{
}

public:
//STDMETHOD(GetUnMarshalClass)(REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, CLSID *pCid);
// STDMETHOD(GetMarshalSizeMax)(REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, DWORD *pSize);
//STDMETHOD(MarshalInterface)(IStream *pStm, REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags);
//STDMETHOD(UnmarshalInterface)(IStream *pStm, REFIID riid, void * *ppv);
//STDMETHOD(ReleaseMarshalData)(IStream *pStm);
//STDMETHOD(DisconnectObject)(DWORD dwReserved);



STDMETHODIMP CMarshalTest::Add(void)
{
// TODO: 在此添加实现代码

return S_OK;
}


STDMETHODIMP CMarshalTest::GetUnMarshalClass(REFIID riid, void *pv,
DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, CLSID *pCid)
{
return S_OK;
}

STDMETHODIMP CMarshalTest::GetMarshalSizeMax(REFIID riid, void *pv, DWORD dwDestContext,
void *pvDestContext, DWORD mshlflags, DWORD *pSize)
{
return S_OK;
}

STDMETHODIMP CMarshalTest::MarshalInterface(IStream *pStm, REFIID riid,
void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags)
{
return S_OK;
}


STDMETHODIMP CMarshalTest::UnmarshalInterface(IStream *pStm, REFIID riid,
void * *ppv)
{
return S_OK;
}

STDMETHODIMP CMarshalTest::ReleaseMarshalData(IStream *pStm)
{
return S_OK;
}

STDMETHODIMP CMarshalTest::DisconnectObject(DWORD dwReserved)
{
return S_OK;
}
};


我把IMarshal接口去掉后就不报错
...全文
150 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
许文君 2014-02-12
  • 打赏
  • 举报
回复

帮你把修改完的发回去了,注意我没释放接口,今天中午没睡到觉
许文君 2014-02-12
  • 打赏
  • 举报
回复
看了下,你这几个接口都是必须要实现的,不能简单的return S_OK 要么不实现这个接口注释掉这两行 //public IMarshal, //COM_INTERFACE_ENTRY(IMarshal) //没有实现
好人吗 2014-02-12
  • 打赏
  • 举报
回复
引用 6 楼 xuddk727 的回复:
[quote=引用 3 楼 down_login 的回复:] [quote=引用 1 楼 xuddk727 的回复:] 错误信息呢?你这个是用ATL框架创建的吗 ?
错误信息:不能实例化抽象类,停在CComobject类CreateInstance函数上。 是用ATL框架创建的,IMarshal是我手工加的[/quote] 一般这个情况若出现在编译阶段就说明有接口没有实现,可以把示例代码发我邮箱帮你看下 xuddk727@126.com[/quote] 已经发送
许文君 2014-02-12
  • 打赏
  • 举报
回复
引用 3 楼 down_login 的回复:
[quote=引用 1 楼 xuddk727 的回复:] 错误信息呢?你这个是用ATL框架创建的吗 ?
错误信息:不能实例化抽象类,停在CComobject类CreateInstance函数上。 是用ATL框架创建的,IMarshal是我手工加的[/quote] 一般这个情况若出现在编译阶段就说明有接口没有实现,可以把示例代码发我邮箱帮你看下 xuddk727@126.com
真相重于对错 2014-02-12
  • 打赏
  • 举报
回复
引用 3 楼 down_login 的回复:
[quote=引用 1 楼 xuddk727 的回复:] 错误信息呢?你这个是用ATL框架创建的吗 ?
错误信息:不能实例化抽象类,停在CComobject类CreateInstance函数上。 是用ATL框架创建的,IMarshal是我手工加的[/quote] 是这个atl项目出错,还是调用它时候出错?
好人吗 2014-02-12
  • 打赏
  • 举报
回复
引用 2 楼 oyljerry 的回复:
你有接口IMarshal对应的虚函数没有实现
我特别对照了IMarshal接口的实现,应该没有函数没有实现吧!若有请指出,谢谢。
好人吗 2014-02-12
  • 打赏
  • 举报
回复
引用 1 楼 xuddk727 的回复:
错误信息呢?你这个是用ATL框架创建的吗 ?
错误信息:不能实例化抽象类,停在CComobject类CreateInstance函数上。 是用ATL框架创建的,IMarshal是我手工加的
好人吗 2014-02-12
  • 打赏
  • 举报
回复
引用 10 楼 xuddk727 的回复:
主要就是GetUnmarshalClass所致
谢谢xuddk727。 我刚刚针对您给我发的代码,提出了一个疑惑,已给你发邮件,有空请回复下。我马上结贴给分。
许文君 2014-02-12
  • 打赏
  • 举报
回复
主要就是GetUnmarshalClass所致
oyljerry 2014-02-11
  • 打赏
  • 举报
回复
你有接口IMarshal对应的虚函数没有实现
许文君 2014-02-11
  • 打赏
  • 举报
回复
错误信息呢?你这个是用ATL框架创建的吗 ?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧