• 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里单对象,多接口怎么做。
描述:

用向导创建ATL的工程后,在添加了new ATL Object,接口的定义为custom。
因为要导出多个接口,就在idl里添加了定义,代码如下
import "oaidl.idl";
import "ocidl.idl";
  [  
     object,
     uuid(F11D0AA2-FFA5-11D7-8E9A-00E04C69B973),
     helpstring("IBvtDriver Interface"),
     pointer_default(unique)
  ]
  interface IBvtDriver : IUnknown
  {
  };
  [
    object,
    uuid(3B025F97-D001-45F3-A6A6-C944F64FB6E2),
    helpstring("IBvtVgaPreview Interface"),
    pointer_default(unique)
  ]
  interface IBvtVgaPreview : IUnknown
  {
  };
[
uuid(F11D0AA1-FFA5-11D7-8E9A-00E04C69B973),
// uuid(68AF1D58-06E7-4429-B934-E46F48A89B27),
version(1.0),
helpstring("MaterialPlayCom 1.0 Type Library")
]
library MATERIALPLAYCOMLib
{
  importlib("stdole32.tlb");
  importlib("stdole2.tlb");
  [
    uuid(F11D0AA4-FFA5-11D7-8E9A-00E04C69B973),
    helpstring("MaterialPlay Class")
  ]
  coclass MaterialPlay
  {
    [default] interface IBvtDriver;
    interface IBvtVgaPreview;
  };
};
然后在接口映射表里添加,代码如下,
class ATL_NO_VTABLE CMaterialPlay : 
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMaterialPlay, &CLSID_MaterialPlay>,
public IBvtDriver,
public IBvtVgaPreview
{
   public:
     CMaterialPlay()
     {
     }
DECLARE_REGISTRY_RESOURCEID(IDR_MATERIALPLAY)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CMaterialPlay)
   COM_INTERFACE_ENTRY(IBvtDriver)
   COM_INTERFACE_ENTRY(IBvtVgaPreview)
END_COM_MAP()
};
编译通过,也注册了。但是发现注册表里只有对象的注册IID,而接口的IID却没有,请问有什么原因。
后来我用向导生成了一个custom单接口的对象,注册后发现也只有对象的IID,没有接口的IID,难道组件里的interface不注册?
请指教,谢谢。


解决方案1:

mark

解决方案2:

Custom接口就是从IUnknown接口派生的类,显然它就只能用虚函数表的方式来调用接口了,他不继承自IDispatch接口,自然不需要IID。

解决方案3:

不可能,那是你没有找到不是说没有!你写个demo调用一些你的组件就知道了!

解决方案4:

你的几个uuid的值都一样啊!所以……


分享到: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-05 √知道一个窗口的句柄,如何得到该窗口内的一个文本框的句柄
  • 2017-06-04 哪位兄弟发送一份atl8给我,有分分!:)
  • 2017-06-05 C++变量类型
  • 2017-06-04 如何取得IE网页中选取的文本,像划词
  • 2017-06-05 有没有什么方法或者什么工具知道某个文件(比如txt文件)是被哪个进程打开的?
  • 2017-06-04 用VB做的ActiveX控件,能否添加一个二维数组作为控件的属性?代码?
  • 2017-06-05 VC6生成的动态库在vc2005下面调用出错。非常急。
  • 2017-06-05 mfc串口通信使用MSCOMM控件,如何实现上位机与下位机的通信啊?
  • 2017-06-04 怎样判断系统中已安装了某种字体?

文章分类

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

最近更新的内容

    • 》》》》一个静态链接库的编译问题!
    • 如何保证在当前IE中打开网页
    • CAxWindow的CreateControl函数的pStream参数怎么封装控件属性?
    • 点击IE关闭按钮时最小化IE到系统托盘,该如何做?
    • vc60如何得到PPT当前所选择的slide的页码?
    • 如何在vc中实现数据库中的音频数据的播放
    • 请教高手:当Windows自带WindowsMediaPlayer或者其他播放软件在播放歌曲媒体时,如何获取它的状态?
    • >netconfigserver一看,XPpro的登录的用户数量上限是10,怎么改变这个值呢?
    • 如何用VC屏蔽IE中的返回键"Alt+<--",急,谢谢!
    • 在ACTIVEX中LOAD一个MFCDLL含有一个dialog,当关闭浏览器时出现Assertion错误

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

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