关于COM组件QueryInterface返回E_NOINTERFACE的问题

ray_zhang_3 2012-02-18 03:43:55
在程序中,C++工程调用了一个C#写的COM组件,但是在CreateInstance创建一个对象的时候总是没有创建成功。

错误是在CreateInstance中,首先调用了CoCreateInstance是成功的,但是调用QueryInterface的时候返回E_NOINTERFACE,而最终把对象接口返回为空。

HRESULT CreateInstance(const CLSID& rclsid, IUnknown* pOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) throw()
{
HRESULT hr;

_Release();

if (dwClsContext & (CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)) {
IUnknown* pIUnknown;
hr = CoCreateInstance(rclsid, pOuter, dwClsContext, __uuidof(IUnknown), reinterpret_cast<void**>(&pIUnknown));

if (SUCCEEDED(hr)) {
hr = OleRun(pIUnknown);

if (SUCCEEDED(hr)) {
hr = pIUnknown->QueryInterface(GetIID(), reinterpret_cast<void**>(&m_pInterface)); //此次返回为
E_NOINTERFACE

}

pIUnknown->Release();
}
}
else {
hr = CoCreateInstance(rclsid, pOuter, dwClsContext, GetIID(), reinterpret_cast<void**>(&m_pInterface));
}

if (FAILED(hr)) {
// just in case refcount = 0 and dtor gets called
m_pInterface = NULL;
}

return hr;
}

另外,查看了一下注册表,里面的相应的接口都有的,但是还是返回E_NOINTERFACE,请大牛帮忙分析一下,谢谢!
...全文
727 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sl51314240 2012-02-20
  • 打赏
  • 举报
回复
用COM的DLL来启动并且调试啊
ray_zhang_3 2012-02-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sl51314240 的回复:]

你需要跟踪进COM组件,有源码没?
[/Quote]
有源码的,怎么跟踪呢?
sl51314240 2012-02-18
  • 打赏
  • 举报
回复
你需要跟踪进COM组件,有源码没?
ray_zhang_3 2012-02-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 taoyh2002 的回复:]

楼主参考下:
http://blog.sina.com.cn/s/blog_532637060100fdud.html
[/Quote]
恩,我就是按照他的第2中情况“在VS2005中C#编写的COM组件,使用VC6.0调用”来实现的,就类似于在
AddCom::AddComInterfacePtr p_Add(__uuidof(AddComService));
这句中,跟进去发现是调用CreateInstance,而在其中的QueryInterface是返回就一直为空,不知为啥。。。
taoyh2002 2012-02-18
  • 打赏
  • 举报
回复
楼主参考下:
http://blog.sina.com.cn/s/blog_532637060100fdud.html
ray_zhang_3 2012-02-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sl51314240 的回复:]

跟进去看呀,我猜可能是反悔类型的时候没有强转,或者穿的参数错误以至于找不到对象
[/Quote]

请教怎么跟进去啊?用vs的F11键跟不进去啊
另外,你说的是QueryInterface的返回值吗,传的参数也是queryinterface的参数吗?
sl51314240 2012-02-18
  • 打赏
  • 举报
回复
跟进去看呀,我猜可能是反悔类型的时候没有强转,或者穿的参数错误以至于找不到对象

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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