zoukankan      html  css  js  c++  java
  • C++接口着色技术

    最近翻看《深入解析ATL》一书,了解了一种叫做接口着色的技术,很是好奇。但到百度上一搜,一篇相关的文章都没看到,没办法只有自己写个Demo实验一下,居然还真有那会事,呵呵。

    接口着色技术被ATL3.0以前的版本用户实现IXXXImpl类,这些类是为了提供特定COM接口的普遍的实现以供用户方便使用。ATL3.0以前的版本的IXXXImpl并不是直接从相应的COM接口派生,而是模拟COM接口的结构(包括成员方法的参数、顺序、返回值等都要一致,方法名称可以不一致),COM客户类从IXXXImpl派生后,就可以从这个COM对象中请求相应的COM接口,尽管实际上没有从COM接口直接继承.原理就这些,写个Demo验证一下:

    /*
    * 目标接口
    */
    class  IBase
    {
    public:
        
    virtual void BaseMethod() = 0;
    };

    /*
    * 替换接口
    */
    class  IReplaceBase 
    {
    public:
        
    virtual void ReplaceBaseMethod()
        {
            AtlMessageBox( NULL, _T(
    "IReplaceBase::ReplaceBaseMethod") );
        }
    };

    /*
    * 从替换接口派生接口
    */
    class  CDeriveDemo : public IReplaceBase
    {
    };
    请求接口如:
            CDeriveDemo *pThis = new CDeriveDemo;
            IBase 
    *pBase = reinterpret_cast<IBase*>(pThis);
            ATLASSERT( pBase 
    != NULL );
            pBase
    ->BaseMethod();
    运行后会显示 IReplaceBase::ReplaceBaseMethod 提示串,证明其实际上调用的是IReplaceBase的方法。
  • 相关阅读:
    uni-app快速上手
    uni-app快速上手
    什么是uni-app?
    什么是uni-app?
    美颜小程序准备
    美颜小程序准备
    vue的基本使用
    vue的基本使用
    Web前端开发(高级)下册-目录
    Web前端开发(高级)下册-目录
  • 原文地址:https://www.cnblogs.com/fangkm/p/1448570.html
Copyright © 2011-2022 走看看