• 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 > 在线急等,关于ATL中接口继承使用的问题

在线急等,关于ATL中接口继承使用的问题

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

佚名通过本文主要向大家介绍了atl34砂轮,atl方形动力电池,atl80.dll官方下载,atl71.dll一键修复,atl等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 在线急等,关于ATL中接口继承使用的问题
描述:

如果我想设计两个接口,命名为IA与IB,其中IA中有一个f1()的方法,IB从IA继承,而且另外有一个f2()的方法,我想在两个类中CA与CB具体实现。
IDL文件如下: 
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(0BDAAEA2-5D45-455E-8EF5-29906D6FBBBC),
dual,
helpstring("IA Interface"),
pointer_default(unique)
]
interface IA : IDispatch
{
[id(1), helpstring("method f1")] HRESULT f1();
};
[
object,
uuid(22538202-9CED-4324-9821-07F3984B4033),
dual,
helpstring("IB Interface"),
pointer_default(unique)
]
interface IB : IA
{
[id(2), helpstring("method f2")] HRESULT f2();
};
[
uuid(3DF7AD71-683C-4E85-94AE-C53B67CD8E3F),
version(1.0),
helpstring("Question 1.0 Type Library")
]
library QUESTIONLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
uuid(283DEB10-D082-4240-BC14-E74AFDC56E20),
helpstring("A Class")
]
coclass A
{
[default] interface IA;
};
[
uuid(F0EC3A7B-4426-427F-91B2-FAA24C8528B8),
helpstring("B Class")
]
coclass B
{
[default] interface IB;
};
};
而CA的头文件定义如下: 
// A.h : Declaration of the CA
#ifndef __A_H_
#define __A_H_
#include "resource.h"       // main symbols
/////////////////////////////////////////////////////////////////////////////
// CA
class ATL_NO_VTABLE CA : 
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CA, &CLSID_A>,
public IDispatchImpl<IA, &IID_IA, &LIBID_QUESTIONLib>
{
public:
CA()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_A)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CA)
COM_INTERFACE_ENTRY(IA)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// IA
public:
STDMETHOD(f1)();
};
#endif //__A_H_
问题是CB的头文件,为什么必须在CB中也实现f1()方法了。 
// B.h : Declaration of the CB
#ifndef __B_H_
#define __B_H_
#include "resource.h"       // main symbols
/////////////////////////////////////////////////////////////////////////////
// CB
class ATL_NO_VTABLE CB : 
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CB, &CLSID_B>,
public IDispatchImpl<IB, &IID_IB, &LIBID_QUESTIONLib>
{
public:
CB()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_B)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CB)
COM_INTERFACE_ENTRY(IB)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// IB
public:
STDMETHOD(f2)();
//IA
STDMETHOD(f1)();//???????此处必须有,否则编译报错。
};
#endif //__B_H_
当然如果在一个类中实现这两个接口可以避免两次实现,这个我懂,我想问在两个类的实现中有没有办法,在继承类中直接利用基类的方法,而不需要再实现一遍。 
我第一次提问,可能描述不清楚,请高手们参考我的程序部分。
谢谢。


解决方案1:

完全可以的啊,
class IAImp
{
   STDMETHOD(f1)(){ ...}
}
class ATL_NO_VTABLE CA : 
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CA, &CLSID_A>,
public IDispatchImpl<IA, &IID_IA, &LIBID_QUESTIONLib>
{
}


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

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

  • ATL怎么实现可变参数的接口?
  • 怎样用ATL写一个含有其它组件的进程外COM
  • ATL7中加入socket的头文件编译出错
  • 在ATL工程MFC窗口调用Create失败(注:我的ATL工程支持MFC)
  • ATL正则表达式验证遇到中文出现异常!
  • 关于ATL做复合控件的问题
  • [讨论]ATL中的文本字符串,我该定义为什么类型
  • ATL开发指南第2版为什么所有的书店都没有卖的?电子版也没有
  • 大家一般都怎么打包Atl开发的ActiveX控件?
  • 求ATL解决方案

相关文章

  • 2017-06-04 为何控件使对话框无法显示??
  • 2017-06-04 如何读取word文件里面内容!高分给与解决问题者[100]
  • 2017-06-05 在网页中加载ocx控件
  • 2017-06-04 一个char变量中保存着一个BMP图片,怎样把它显示出来
  • 2017-06-05 请问64位,IEncryptedDataPtrencryptor为什么不能正常工作
  • 2017-06-05 这两天对自杀程序感兴趣,有人能给我源代码吗?~~我给分是很大方的
  • 2017-06-05 ACTIVEX控件里菜单无法响应
  • 2017-06-05 一个关于结束线程的问题:
  • 2017-06-04 activex安全警告已经阻止此软件因为无法验证发行者,求解决办法
  • 2017-06-04 我要把页面的<body>对象传给ActiveX控件,那么控件的方法的参数应该是什么?IHTMLDocument2p还是别的什么?

文章分类

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

最近更新的内容

    • 请教:怎样根据Mutex句柄找到拥有该Mutex的进程句柄?
    • 网页中cab包问题,为什么我做的cab包指定链接后客户端总显不出来
    • 请教,为什么我定义了一个string变量,在程序结束时不能析构?
    • 高分求解。。。。。弄了一整夜未找出原因!
    • 我想往com里传进去一个数组,该怎么写?附程序
    • 怎样才能测试多线程串口通信程序?
    • 如何把GetProcAddress得到的地址赋值给数组?
    • com问题如何生成xml文件?
    • 线程套节子的问题(高手救命)
    • Combobox的Activex实现

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

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