关于接口继承的问题【QueryInterface返回值为E_INVALIDARG】

yanweiqi 2010-09-03 09:02:33
子接口和父接口之间如何进行相互转化
IB : public IA
IC : public IA

当我从另一个接口IManager的方法中获取了IA的接口指针,而实际这个接口指针是指向IB,
而我在客户端调用IA->QueryInterface(IID_IB,(void**)ppvB)时,hr返回E_INVALIDARG;

请问是哪里出了问题?

PS:我的COM服务器基于EXE的进程外服务器,但是本地的,非远程。
...全文
122 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
warroom 2010-09-03
  • 打赏
  • 举报
回复
呵呵,不客气,我主要看到你备注的//此时的hr返回值为 E_INVALIDARG。一般就从参数查找原因了。
yanweiqi 2010-09-03
  • 打赏
  • 举报
回复
晕。。。

居然忘了这个,还让我迷茫了昨天下午加晚上。。。 真是被搞晕了。。。

我一直怀疑是进程外服务器的原因,没想到。。。

anyway,太感谢你了warroom!!!
warroom 2010-09-03
  • 打赏
  • 举报
回复
调用少了引用符号吧,hr = pNetObj->QueryInterface(IID_INetVend,(void**)&pVendor);
yanweiqi 2010-09-03
  • 打赏
  • 举报
回复
大家帮我看看我的代码这么写有没有什么问题?

//idl
interface INEObj : IDispatch
{
[id(1), helpstring("方法 GetName")] HRESULT GetName([out] BSTR* _pStrName);
}
interface INEVend : INEObj
{
[id(2), helpstring("方法 GetType")] HRESULT GetType([out] BSTR* _pStrType);
}

//接口实现类
class CVendorObj :
public CComObjectRootEx<CComSingleThreadModel>,
public IDispatchImpl<INEVend, &IID_INetVend, &LIBID_NETLib>
{
......
BEGIN_COM_MAP(CVendorObj)
COM_INTERFACE_ENTRY(INEVend)
COM_INTERFACE_ENTRY(INEObj)
END_COM_MAP()

STDMETHOD(GetName)(BSTR* _pStrName);
STDMETHOD(GetType)(BSTR* __pStrType);

}

//客户端调用
INEObj *pNetObj = NULL;
INEVend *pVendor = NULL;
hr = pVendorList->Item(i,(INEObj **)&pNetObj);
if( SUCCEEDED(hr) )
{
hr = pNetObj->QueryInterface(IID_INetVend,(void**)pVendor);
//此时的hr返回值为 E_INVALIDARG

......
}


求高手解答。。。

3,245

社区成员

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

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