• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 请问从COM方法返回的接口是继承自IUnknown的会不会有问题?

请问从COM方法返回的接口是继承自IUnknown的会不会有问题?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了iunknown,iid iunknown,com接口,com接口是什么,com接口图片等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 请问从COM方法返回的接口是继承自IUnknown的会不会有问题?
描述:

现在有一个COM接口
interface IData : IDispatch{
    HRESULT GetData(long param, [out, retval] IDataSet** pIDataSet);
}
其中第二个参数也是一个接口
interface IDataSet: IUnknown;
在vc2008中#import该dll得到方法,得到该
可是CoCreateInstance一个IData接口以后,调用
    IDataSet ds = IData->GetData(param);
返回的ds指针不为空,但是调用ds中的方法却总扔异常
后来发现IDataSet继承的不是IDispatch而是IUnknow,请问是不是与此有关?
应该如何解决这个问题呢?
此外:这个COM组件在其他语言delphi和bcb中均正常工作。


解决方案1:

有用,收藏一下

解决方案2:

GetData调用方法不对,正确的调用方法:


IData *pData = NULL;
CoCreateInstance(CLSID_Data, NULL, CLSCTX_INPROC_SERVER, __uuidof(IData), (void**)&pData);
IDataSet *pds = NULL;
if (pData)
{
    hr = pData->GetData(param, &pds); 
    if (hr == S_OK)
    {
        pds->...
    }
}

解决方案3:

GetData调用方法不对,正确的调用方法:


IData *pData = NULL;
CoCreateInstance(CLSID_Data, NULL, CLSCTX_INPROC_SERVER, __uuidof(IData), (void**)&pData);
IDataSet *pds = NULL;
if (pData)
{
    hr = IData->GetData(param, &pds); 
    if (hr == S_OK)
    {
        pds->...
    }
}

解决方案4:

 IDataSet ds = IData->GetData(param); 这种调用方式对吗?
其他的应该没有异常

解决方案5:

返回的接口不是必须为派生自IDispatch的,IDispatch只有对于那些不支持IUnknown的语言(如vb)才是必须的
我觉得你调用ds的方法出现异常,不一定合它返回什么类型接口有关,而是你方法本身就有异常。尝试调试你那个IDataSet的api把

引用楼主 sigh02 的帖子:
现在有一个COM接口 
interface IData : IDispatch{ 
    HRESULT GetData(long param, [out, retval] IDataSet** pIDataSet); 
} 
其中第二个参数也是一个接口 
interface IDataSet: IUnknown; 
在vc2008中#import该dll得到方法,得到该 
可是CoCreateInstance一个IData接口以后,调用 
    IDataSet ds = IData->GetData(param); 
返回的ds指针不为空,但是调用ds中的方法却总扔异常 
后来发现IDataSet继承的不是IDis…


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ATL项目中怎样建立继承于IUnknown的没有任何实现的基接口?
  • 关于IUNKNOWN的QueryInterface的实现问题
  • IUnknown作参数时怎么传参?
  • COM聚合时候对IUnknown有两个不同的实现
  • 继承IUnknown的接口,为什么在VB对象浏览中还是能看到?
  • IUnknown的Addref/release功能都类似,为什么还要用户去实现?
  • 接口在对IUnknown的继承过程中为什么不使用虚继承?
  • 请问怎么通过进程ID获得IUnknown接口?
  • 怎样理解“IUnknow即没有数据也没有函数,我们仅仅继承了接口”?IUnknown不是有3个函数声明吗?
  • 我做了一个ActiveX控件,在客户程序的函数中需要此控件的IUnknown做为参数,调用GetIDispatch()函数总出错,该怎么办?

相关文章

  • 2017-06-04 ATL开发的activex为什么只有在IE60的机子上才能使用?
  • 2017-06-04 初学COM,求教一个COM的问题(有代码)望高手指点。
  • 2017-06-04 应该很简单的问题,但是我以前不是做COM方面的不知道,求人帮忙。
  • 2017-06-05 调用COM对象的时候,为什麽对象变量名之后没有弹出该对象的方法与属性?
  • 2017-06-04 SQLite数据插入不正确,急急急。。。。。
  • 2017-06-04 关于在工作线程中激发com事件的问题
  • 2017-06-04 ATL获取函数的前几位。
  • 2017-06-04 求救!!!关于ie工具条
  • 2017-06-05 dll中的对话框问题
  • 2017-06-04 MFC程序调用CChartCtrl控件画图问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 有那位大侠知道如何在OS/2下调用vc写的32位DLL的方法吗?请帮帮忙,万分感谢!!!
    • 一个LINK2001和FATILERRORLNK1120错误,在线等,立马给分!!1
    • 有关COM的问题?
    • 内存指针问题希望高手指点~~~~~~~~~~~~~~~~~~~
    • mscomm32ocx//创建的控制无法正常显示在对话框上?
    • 请高手指点!!关于组件内部调用的问题
    • 难道用DirectSound播放WAV数据时应用程序必须在总最前端且是激活的?我想在最小化时也能出声
    • 求助:MSComm接收数据感谢!
    • 如何重定义CDialogImpl类的OnPaint?
    • 帮我翻译wordvba代码,就一点

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有