• 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 > 多接口问题请教

多接口问题请教

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

佚名通过本文主要向大家介绍了 多接口问题请教等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 多接口问题请教
描述:

IDL如下:
===========================================================
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(3D773733-354F-4648-923F-A916C20922E4),
dual,
helpstring("ITest Interface"),
pointer_default(unique)
]
interface ITest : IDispatch
{
[id(1), helpstring("method GetString")] HRESULT GetString([out, retval] BSTR *pVal);
};
[
object,
uuid(78C7DEC7-D05F-47CF-B563-EEE1C963B39F),
helpstring("IMyBase Interface"),
pointer_default(unique)
]
interface IMyBase : IUnknown
{
[id(2),helpstring("method GetBaseString")] HRESULT GetBaseString([out,retval] BSTR *pVal);
};
[
uuid(F3423973-035F-4865-8476-838370ECC7DC),
version(1.0),
helpstring("Inter 1.0 Type Library")
]
library INTERLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
uuid(10BABFB1-F7C5-4D58-886A-5F334D68F273),
helpstring("Test Class")
]
coclass Test
{
[default] interface ITest;
interface IMyBase;
};
};
=============================================
Test类实现了IMyBase接口, 其行为从另外一个CMyBase类继承:
====================================
class CMyBase
{
// IMyBase
public:
STDMETHOD(GetBaseString)(BSTR *pVal)
{
*pVal=CComBSTR(L"This is base string!").Detach();
return S_OK;
}
};
class ATL_NO_VTABLE CTest : 
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CTest, &CLSID_Test>,
public IDispatchImpl<ITest, &IID_ITest, &LIBID_INTERLib>,
public IMyBase,
public CMyBase
{
public:
CTest()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_TEST)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CTest)
COM_INTERFACE_ENTRY(ITest)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IMyBase)
END_COM_MAP()
// ITest
public:
STDMETHOD(GetString)(/*[out, retval]*/ BSTR *pVal);
// IMyBase
STDMETHOD(GetBaseString)(BSTR * pVal)
{
return CMyBase::GetBaseString(pVal);
}
};
=======================================
但在使用Test对象时, 不能使用IMyBase接口的GetBaseString方法,要怎么做才可以?


解决方案1:

COM_INTERFACE_ENTRY_IID(IID_IDispatch,ITest)

解决方案2:

“而IMyBase接口又不支持IDispatch”,可以的,但接口映射表要改一改
BEGIN_COM_MAP(CTest)
COM_INTERFACE_ENTRY(ITest)
COM_INTERFACE_ENTRY(IMyBase)
COM_INTERFACE_ENTRY_IID(IDispatch,ITest)
END_COM_MAP()


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

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

相关文章

  • 2017-06-04 COM+的对象池的问题!!!!
  • 2017-06-05 有没有办法在Windows创建进程前,做一些前置动作
  • 2017-06-05 不显示删除回复显示所有回复显示星级回复显示得分回复用vc写GPS串口程序,但是数据读不出来,求高手帮忙
  • 2017-06-04 请教:这个warning是什么意思?
  • 2017-06-04 怎么解决msxml显示中文乱码问题?
  • 2017-06-05 请教一个关于双cpu协调的问题?
  • 2017-06-05 为什么我往VSNET编辑器窗口和MSN的消息窗口发WM_GETTEXT和EM_GETSEL,什么也得不到?
  • 2017-06-05 请问!工作者线程处理函数中调用SendMessage函数的问题
  • 2017-06-05 绝望中~~让窗口保持激活
  • 2017-06-05 BHOToolBar中多个按钮的响应问题

文章分类

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

最近更新的内容

    • idl用什么编辑器?
    • 编译通过后,再按F7,为什么只生成dll文件而没有lib文件?
    • (DirectShow)为什么网络传视频要自己写发送filter和接受filter?
    • HELP!关于CSocket和多线程。
    • 如何修改dll中的符号?(100分!!!)
    • 怎样从BorlandC编写的DLL程序变成用vc的dll的方法
    • 关于DLL的设计和部署问题
    • 用API钩子拦截SEND没问题,为什么拦截RECV时出了问题?
    • DLL导出问题
    • 请教vc为vb提供的dll

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

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