• 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 > 怎样调用基于IDispatch封装的类阿?

怎样调用基于IDispatch封装的类阿?

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

佚名通过本文主要向大家介绍了idispatch,idispatch error 3092,idispatch error 3149,idispatch error 3088,idispatch error 3127等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 怎样调用基于IDispatch封装的类阿?
描述:


各位,请教一个问题,如下的定义:
#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
    IPlayer : public IDispatch
    {
    public:
        virtual  HRESULT STDMETHODCALLTYPE GenerateID( 
             BSTR *pbstrSeed) = 0;
        
        virtual  HRESULT STDMETHODCALLTYPE getContent( 
             BSTR *pVal) = 0;
        
        virtual  HRESULT STDMETHODCALLTYPE putInfo( 
             BSTR newVal) = 0;
    };
#endif
其中,#ifdef _68K_
#define STDMETHODCALLTYPE       __cdecl
#else
#define STDMETHODCALLTYPE       __stdcall
#endif
这个定义在winnt.h文件中
我该怎样引用这个IPlayer类呢?直接引用IPlayer aPlayer时,则出现了下面的问题:
E:\VC Debug\Test\Test.cpp(13) : error C2259: 'IPlayer' : cannot instantiate abstract class due to following members:
        e::\VC Debug\Test\player.h(1727) : see declaration of 'IPlayer'
E:\VC Debug\Test\Test.cpp(13) : warning C4259: 'long __stdcall IUnknown::QueryInterface(const struct _GUID &,void ** )' : pure virtual function was not defined
        c:\program files\microsoft visual studio\vc98\include\unknwn.h(109) : see declaration of 'QueryInterface'
E:\VC Debug\Test\Test.cpp(13) : warning C4259: 'unsigned long __stdcall IUnknown::AddRef(void)' : pure virtual function was not defined
        c:\program files\microsoft visual studio\vc98\include\unknwn.h(113) : see declaration of 'AddRef'
E:\VC Debug\Test\Test.cpp(13) : warning C4259: 'unsigned long __stdcall IUnknown::Release(void)' : pure virtual function was not defined
        c:\program files\microsoft visual studio\vc98\include\unknwn.h(115) : see declaration of 'Release'
E:\VC Debug\Test\Test.cpp(13) : warning C4259: 'long __stdcall IDispatch::GetTypeInfoCount(unsigned int *)' : pure virtual function was not defined
        c:\program files\microsoft visual studio\vc98\include\oaidl.h(2697) : see declaration of 'GetTypeInfoCount'
        
等等,请各位帮忙看看,像这样的类定义,要怎样引用啊?谢谢大家!


解决方案1:

错误提示不是说得很清楚么:
'IPlayer' : cannot instantiate abstract class due to following members:
IPlayer是虚基类,不能实例化,所以,你可以这样:
1、实现错误提示中提到的几个成员函数
2、再写一个类继承自IPlayer,实现之.
over

解决方案2:

这是com接口,com组件的使用分为几个步骤:
1.初始化com库 (CoInitialize)
2.创建com组件(CoCreateInstance)
3.查询接口(比如IPlayer)(可在创建的时候完成即步骤2)
4.使用IPlayer
5.释放IPlayer接口(IPlayer->Release())
6.释放com库(CoUnInitialize)


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

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

  • 实现了IDispatch接口的组件和ActiveX控件用起来有什么不同呢?我觉得一样可以用在Web页面上,为什么ActiveX控件还要多实现那么多各种各样
  • 实现了IDispatch接口的组建,用vbscript怎么调用?
  • IDispatch::Invoke如何通过dispid调用方法?
  • 关于idispatch和typelib
  • 问个弱弱的问题:得到一个ActiveX控件的IDispatch指针后,如何使用?有没有与CListCtrl相同的ActiveX控件?
  • MSFlexGrid有一个Picture属性,是一个IDispatch接口指针,请问如何操作?
  • 请教COM,IDispatch相关问题!
  • 制作弹出广告拦截器时碰到问题,关于OnNewWindow2IDispatchppDisp,BOOLCancel的
  • [关于IDispatch问题]:如何将tlb文件编译进dll中?高分求救
  • 请问一下:COM组件(TLB)中使用IDispatch和CoInitialize两种方法有何不同?谢谢啦

相关文章

  • 2017-06-04 求二手书《ATL开发指南》第二版
  • 2017-06-05 请问线程和进程的有何区别?多谢!
  • 2017-06-04 ADOC2259:'_Connection':cannotinstantiateabstractclass
  • 2017-06-04 怎么能看到user32dll的源码?
  • 2017-06-05 关于wmi获取到的信息的语言的问题
  • 2017-06-04 WinXP+VC6下安装新版PlatformSDK之后编译出错```高分求解
  • 2017-06-05 dll里使用回调函数,调用的时候有问题
  • 2017-06-04 如何利用异步可插入协议对网络资源分类,url地址过滤?
  • 2017-06-05 请问启动一个线程后如何结束它,具体怎么写?如果调用函数的话参数应该怎么写?
  • 2017-06-04 vc++的runtimeerror用try可以处理掉吗?

文章分类

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

最近更新的内容

    • com中的事件接收问题
    • 数组组件的实现方法?送分啊!!救命啊!!
    • VC打开Excel文件后,excelexe进程无法退出,m_appQuit也不起作用,除非程序退出,送分啊!!!
    • 有一关于dll注册和销毁时错误信息的问题,希望大家给我指点迷经。
    • 我用MFC在一个对话框上显示一个图片,我怎么把他移值为ACTIVE控件???
    • 关于线程????
    • 求教使用proc/c++封装ORACLE操作的DLL中出现的问题
    • 在ActiveX中调用ACE初始化,为何总是不能成功?
    • 用ATL产生ActiveX控件,但是无法在VB中放到Form上,百思不得其解,请高手指教,现象:
    • 在一个进程内服务器中(dll)我手动添加了Ontimer消息,但当我用Settimer时,Ontimer不响应,为何?

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

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